ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCAxY2EwNTczLi4yNGE4MTY5IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsMTMgQEAKIENoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNzoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDE5IEF1ZyAyMDAzOgorICBmaXggVEkgSW5ub3ZhdG9yL09NQVAxNTEwIHBpbiBjb25maWdzCisKKyogUGF0Y2hlcyBieSBLc2hpdGlqLCAxOCBBdWcgMjAwMworICAtIGFkZCBzdXBwb3J0IGZvciBhcm05MjZlanMgY3B1IGNvcmUKKyAgLSBhZGQgc3VwcG9ydCBmb3IgVEkgT01BUCAxNjEwIElubm92YXRvciBCb2FyZAorCiAqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE0IEF1ZyAyMDAzOgogICBhZGQgc3VwcG9ydCBmb3IgYnppcDIgdW5jb21wcmVzc2lvbgogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDdmNTA3MzguLjE2MjQwYTggMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0yNzgsNiArMjc4LDcgQEAKIAogS3NoaXRpaiBHdXB0YSA8a3NoaXRpakB0aS5jb20+CiAJb21hcDE1MTBpbm4JCUFSTTkyNVQKKwlvbWFwMTYxMGlubgkJQVJNOTI2RUpTCiAKIERhdmlkIE38bGxlciA8ZC5tdWVsbGVyQGVsc29mdC5jaD4KIApkaWZmIC0tZ2l0IGEvTUFLRUFMTCBiL01BS0VBTEwKaW5kZXggYWY1YWY2YS4uNzZhY2E5OCAxMDA2NDQKLS0tIGEvTUFLRUFMTAorKysgYi9NQUtFQUxMCkBAIC0xMTcsNyArMTE3LDExIEBACiAjIyBBUk05IFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotTElTVF9BUk05PSJhdDkxcm05MjAwZGsgb21hcDE1MTBpbm4gc21kazI0MDAgc21kazI0MTAgdHJhYiBWQ01BOSIKK0xJU1RfQVJNOT0iCVwKKwlhdDkxcm05MjAwZGsJb21hcDE1MTBpbm4Jb21hcDE2MTBpbm4JCQlcCisJc21kazI0MDAJc21kazI0MTAJdHJhYgkJCQlcCisJVkNNQTkJCQkJCQkJCVwKKyIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgWHNjYWxlIFN5c3RlbXMKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYWQwZGUyYzcuLjA2MGMxYzAgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC03NzYsNiArNzc2LDkgQEAKIG9tYXAxNTEwaW5uX2NvbmZpZyA6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTI1dCBvbWFwMTUxMGlubgogCitvbWFwMTYxMGlubl9jb25maWcgOgl1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNmVqcyBvbWFwMTYxMGlubgorCiBzbWRrMjQwMF9jb25maWcJOgl1bmNvbmZpZwogCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgc21kazI0MDAKIApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IGY3MGZmNDcuLjI2MTI3ZmEgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTE0MSw2ICsxNDEsNyBAQAogCiAtIGNwdS83NHh4Xzd4eAlGaWxlcyBzcGVjaWZpYyB0byBNb3Rvcm9sYSBNUEM3NHh4IGFuZCA3eHggQ1BVcwogLSBjcHUvYXJtOTI1dAlGaWxlcyBzcGVjaWZpYyB0byBBUk0JICAgOTI1CSAgIENQVXMKKy0gY3B1L2FybTkyNmVqcwlGaWxlcyBzcGVjaWZpYyB0byBBUk0JOTI2CUNQVXMKIC0gY3B1L21wYzV4eAlGaWxlcyBzcGVjaWZpYyB0byBNb3Rvcm9sYSBNUEM1eHggIENQVXMKIC0gY3B1L21wYzh4eAlGaWxlcyBzcGVjaWZpYyB0byBNb3Rvcm9sYSBNUEM4eHggIENQVXMKIC0gY3B1L21wYzgyNHgJRmlsZXMgc3BlY2lmaWMgdG8gTW90b3JvbGEgTVBDODI0eCBDUFVzCkBAIC0yMDgsNiArMjA5LDggQEAKIC0gYm9hcmQvb3hjCUZpbGVzIHNwZWNpZmljIHRvIE9YQyAgICAgICAgYm9hcmRzCiAtIGJvYXJkL29tYXAxNTEwaW5uCiAJCUZpbGVzIHNwZWNpZmljIHRvIE9NQVAgMTUxMCBJbm5vdmF0b3IgYm9hcmRzCistIGJvYXJkL29tYXAxNjEwaW5uICAKKwkJRmlsZXMgc3BlY2lmaWMgdG8gT01BUCAxNjEwIElubm92YXRvciBib2FyZHMKIC0gYm9hcmQvcGNpcHBjMglGaWxlcyBzcGVjaWZpYyB0byBQQ0lQUEMyL1BDSVBQQzYgYm9hcmRzCiAtIGJvYXJkL3BtODI2CUZpbGVzIHNwZWNpZmljIHRvIFBNODI2ICAgICAgYm9hcmRzCiAtIGJvYXJkL3BwbWM4MjYwCkBAIC0zNTcsNyArMzYwLDcgQEAKIAogCQlDT05GSUdfSEhQX0NSQURMRSwgIENPTkZJR19ETlAxMTEwLCAgICBDT05GSUdfRVA3MzEyLAogCQlDT05GSUdfSU1QQTcsICAgICAgIENPTkZJR19MQVJULCAgICAgICBDT05GSUdfTFVCQk9DSywKLQkJQ09ORklHX0lOTk9WQVRPUk9NQVAxNTEwLAorCQlDT05GSUdfSU5OT1ZBVE9ST01BUDE1MTAsCUNPTkZJR19JTk5PVkFUT1JPTUFQMTYxMAogCQlDT05GSUdfU0hBTk5PTiwgICAgIENPTkZJR19TTURLMjQwMCwgICBDT05GSUdfU01ESzI0MTAsCiAJCUNPTkZJR19UUkFCLAkgICAgQ09ORklHX0FUOTFSTTkyMDBESwogCkBAIC0xOTA1LDcgKzE5MDgsNyBAQAogICAgIEdFTjg2MFRfY29uZmlnCSAgRUJPTllfY29uZmlnCQlGUFM4NjBMX2NvbmZpZwogICAgIEVMUFQ4NjBfY29uZmlnCSAgY21pX21wYzV4eF9jb25maWcJTkVUVklBX2NvbmZpZwogICAgIGF0OTFybTkyMDBka19jb25maWcJICBvbWFwMTUxMGlubl9jb25maWcJTVBDODI2MEFEU19jb25maWcKLQorICAgIG9tYXAxNjEwaW5uX2NvbmZpZwogTm90ZTogZm9yIHNvbWUgYm9hcmQgc3BlY2lhbCBjb25maWd1cmF0aW9uIG5hbWVzIG1heSBleGlzdDsgY2hlY2sgIGlmCiAgICAgICBhZGRpdGlvbmFsICBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgZnJvbSB0aGUgYm9hcmQgdmVuZG9yOyBmb3IKICAgICAgIGluc3RhbmNlLCB0aGUgVFFNOHh4TCBzeXN0ZW1zIHJ1biBub3JtYWxseSBhdCA1MCBNSHogYW5kIHVzZSAgYQpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDE1MTBpbm4vcGxhdGZvcm0uUyBiL2JvYXJkL29tYXAxNTEwaW5uL3BsYXRmb3JtLlMKaW5kZXggYTE2MDJkMS4uNzA5ZmUwNCAxMDA2NDQKLS0tIGEvYm9hcmQvb21hcDE1MTBpbm4vcGxhdGZvcm0uUworKysgYi9ib2FyZC9vbWFwMTUxMGlubi9wbGF0Zm9ybS5TCkBAIC04NCw2ICs4NCw5IEBACiAJbGRyICAgICByMCwgUkVHX0ZVTkNfTVVYX0NUUkxfQwogCWxkciAgICAgcjEsIFZBTF9GVU5DX01VWF9DVFJMX0MKIAlzdHIgICAgIHIxLCBbcjBdCisJbGRyICAgICByMCwgUkVHX0ZVTkNfTVVYX0NUUkxfRAorCWxkciAgICAgcjEsIFZBTF9GVU5DX01VWF9DVFJMX0QKKwlzdHIgICAgIHIxLCBbcjBdCiAJbGRyICAgICByMCwgUkVHX1ZPTFRBR0VfQ1RSTF8wCiAJbGRyICAgICByMSwgVkFMX1ZPTFRBR0VfQ1RSTF8wCiAJc3RyICAgICByMSwgW3IwXQpAQCAtMzUyLDkgKzM1NSw5IEBACiBWQUxfUFVMTF9EV05fQ1RSTF8xOgogCS53b3JkIDB4MmUwNDdmZmYKIFZBTF9QVUxMX0RXTl9DVFJMXzI6Ci0JLndvcmQgMHhmZmQ3ZDNlNgorCS53b3JkIDB4ZmZkNjAzYTYKIFZBTF9QVUxMX0RXTl9DVFJMXzM6Ci0JLndvcmQgMHgwMDAwM2YwMworCS53b3JkIDB4MDAwMDNlMDMKIFZBTF9WT0xUQUdFX0NUUkxfMDoKIAkud29yZCAweDAwMDAwMDA3CiBWQUxfVEVTVF9EQkdfQ1RSTF8wOgpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDE2MTBpbm4vTWFrZWZpbGUgYi9ib2FyZC9vbWFwMTYxMGlubi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTk2YjgzCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDE2MTBpbm4vTWFrZWZpbGUKQEAgLTAsMCArMSw0NyBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSBvbWFwMTYxMGlubm92YXRvci5vIGZsYXNoLm8KK1NPQkpTCTo9IHBsYXRmb3JtLm8KKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICReCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCistaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAxNjEwaW5uL2NvbmZpZy5tayBiL2JvYXJkL29tYXAxNjEwaW5uL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDFjYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDE2MTBpbm4vY29uZmlnLm1rCkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAyCisjIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyMgRGF2aWQgTXVlbGxlciwgRUxTT0ZUIEFHLCA8ZC5tdWVsbGVyQGVsc29mdC5jaD4KKyMKKyMgKEMpIENvcHlyaWdodCAyMDAzCisjIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyMgS3NoaXRpaiBHdXB0YSA8S3NoaXRpakB0aS5jb20+CisjCisjIFRJIElubm92YXRvciBib2FyZCB3aXRoIE9NQVAxNjEwIChBUk05MjVFSlMpIGNwdQorIyBzZWUgaHR0cDovL3d3dy50aS5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFRleGFzIEluc3RydW1lbnRzCisjCisjIElubm92YXRvciBoYXMgMSBiYW5rIG9mIDI1NiBNQiBTRFJBTQorIyBQaHlzaWNhbCBBZGRyZXNzOgorIyAxMDAwJzAwMDAgdG8gMjAwMCcwMDAwCisjCisjCisjIExpbnV4LUtlcm5lbCBpcyBleHBlY3RlZCB0byBiZSBhdCAxMDAwJzgwMDAsIGVudHJ5IDEwMDAnODAwMAorIyAobWVtIGJhc2UgKyByZXNlcnZlZCkKKyMKKyMgd2UgbG9hZCBvdXJzZWxmIHRvIDExMDAnMDAwMAorIworIworCisKK1RFWFRfQkFTRSA9IDB4MTEwMDAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAxNjEwaW5uL2ZsYXNoLmMgYi9ib2FyZC9vbWFwMTYxMGlubi9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjViNjgKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMTYxMGlubi9mbGFzaC5jCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAxCisgKiBLeWxlIEhhcnJpcywgTmV4dXMgVGVjaG5vbG9naWVzLCBJbmMuIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDEKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBLc2hpdGlqIEd1cHRhIDxLc2hpdGlqQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWIuaD4KKworI2RlZmluZSBQSFlTX0ZMQVNIX1NFQ1RfU0laRQkweDAwMDIwMDAwCS8qIDI1NiBLQiBzZWN0b3JzICh4MikgKi8KK2ZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOwkvKiBpbmZvIGZvciBGTEFTSCBjaGlwcyAgICAqLworCisvKiBCb2FyZCBzdXBwb3J0IGZvciAxIG9yIDIgZmxhc2ggZGV2aWNlcyAqLworI3VuZGVmIEZMQVNIX1BPUlRfV0lEVEgzMgorI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRIMTYKKworI2lmZGVmIEZMQVNIX1BPUlRfV0lEVEgxNgorI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRICQl1c2hvcnQKKyNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSFYJCXZ1X3Nob3J0CisjZGVmaW5lIFNXQVAoeCkJCQlfX3N3YWIxNih4KQorI2Vsc2UKKyNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSAkJdWxvbmcKKyNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSFYJCXZ1X2xvbmcKKyNkZWZpbmUgU1dBUCh4KQkJCV9fc3dhYjMyKHgpCisjZW5kaWYKKworI2RlZmluZSBGUFcJRkxBU0hfUE9SVF9XSURUSAorI2RlZmluZSBGUFdWCUZMQVNIX1BPUlRfV0lEVEhWCisKKyNkZWZpbmUgbWIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiA6IDogIm1lbW9yeSIpCisKKworCisvKiBGbGFzaCBPcmdhbml6YXRpb24gU3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBPcmdEZWYgeworCXVuc2lnbmVkIGludCBzZWN0b3JfbnVtYmVyOworCXVuc2lnbmVkIGludCBzZWN0b3Jfc2l6ZTsKK30gT3JnRGVmOworCisKKy8qIEZsYXNoIE9yZ2FuaXphdGlvbnMgKi8KK09yZ0RlZiBPcmdJbnRlbF8yOEYyNTZMMThUW10gPSB7CisJezQsIDMyICogMTAyNH0sCQkJCS8qIDQgKiAzMmtCeXRlcyBzZWN0b3JzICovCisJezI1NSwgMTI4ICogMTAyNH0sCQkJLyogMjU1ICogMTI4a0J5dGVzIHNlY3RvcnMgKi8KK307CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRnVuY3Rpb25zCisgKi8KK3Vuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCk7CitzdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKEZQVyAqIGFkZHIsIGZsYXNoX2luZm9fdCAqIGluZm8pOworc3RhdGljIGludCB3cml0ZV9kYXRhIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBkZXN0LCBGUFcgZGF0YSk7CitzdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICogaW5mbyk7Cit2b2lkIGlubGluZSBzcGluX3doZWVsICh2b2lkKTsKK3ZvaWQgZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICogaW5mbyk7Cit2b2lkIGZsYXNoX3VucHJvdGVjdF9zZWN0b3JzIChGUFdWICogYWRkcik7CitpbnQgZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqIGluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KTsKK2ludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3Vuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCkKK3sKKwlpbnQgaTsKKwl1bG9uZyBzaXplID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgaSsrKSB7CisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQlmbGFzaF9nZXRfc2l6ZSAoKEZQVyAqKSBQSFlTX0ZMQVNIXzEsICZmbGFzaF9pbmZvW2ldKTsKKwkJCWZsYXNoX2dldF9vZmZzZXRzIChQSFlTX0ZMQVNIXzEsICZmbGFzaF9pbmZvW2ldKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGFuaWMgKCJjb25maWd1cmVkIHRvIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOworCX0KKworCS8qIFByb3RlY3QgbW9uaXRvciBhbmQgZW52aXJvbm1lbnQgc2VjdG9ycworCSAqLworCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9TRVQsCisJCQlDRkdfRkxBU0hfQkFTRSwKKwkJCUNGR19GTEFTSF9CQVNFICsgbW9uaXRvcl9mbGFzaF9sZW4gLSAxLCAmZmxhc2hfaW5mb1swXSk7CisKKwlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAorCQkJQ0ZHX0VOVl9BRERSLAorCQkJQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TSVpFIC0gMSwgJmZsYXNoX2luZm9bMF0pOworCisJcmV0dXJuIHNpemU7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJaW50IGk7CisJT3JnRGVmICpwT3JnRGVmOworCisJcE9yZ0RlZiA9IE9yZ0ludGVsXzI4RjI1NkwxOFQ7CisJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJcmV0dXJuOworCX0KKworCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQkJaWYgKGkgPiAyNTUpIHsKKwkJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4ODAwMCk7CisJCQkJaW5mby0+cHJvdGVjdFtpXSA9IDA7CisJCQl9IGVsc2UgeworCQkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArCisJCQkJCQkoaSAqIFBIWVNfRkxBU0hfU0VDVF9TSVpFKTsKKwkJCQlpbmZvLT5wcm90ZWN0W2ldID0gMDsKKwkJCX0KKwkJfQorCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJaW50IGk7CisKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKKwljYXNlIEZMQVNIX01BTl9JTlRFTDoKKwkJcHJpbnRmICgiSU5URUwgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKKwljYXNlIEZMQVNIXzI4RjI1NkwxOFQ6CisJCXByaW50ZiAoIkZMQVNIIDI4RjI1NkwxOFRcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7CisJCWJyZWFrOworCX0KKworCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCisJCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCisJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgeworCQlpZiAoKGkgJSA1KSA9PSAwKQorCQkJcHJpbnRmICgiXG4gICAiKTsKKwkJcHJpbnRmICgiICUwOGxYJXMiLAorCQkJaW5mby0+c3RhcnRbaV0sIGluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7CisJfQorCXByaW50ZiAoIlxuIik7CisJcmV0dXJuOworfQorCisvKgorICogVGhlIGZvbGxvd2luZyBjb2RlIGNhbm5vdCBiZSBydW4gZnJvbSBGTEFTSCEKKyAqLworc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplIChGUFcgKiBhZGRyLCBmbGFzaF9pbmZvX3QgKiBpbmZvKQoreworCXZvbGF0aWxlIEZQVyB2YWx1ZTsKKworCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCisJYWRkclsweDU1NTVdID0gKEZQVykgMHgwMEFBMDBBQTsKKwlhZGRyWzB4MkFBQV0gPSAoRlBXKSAweDAwNTUwMDU1OworCWFkZHJbMHg1NTU1XSA9IChGUFcpIDB4MDA5MDAwOTA7CisKKwltYiAoKTsKKwl2YWx1ZSA9IGFkZHJbMF07CisKKwlzd2l0Y2ggKHZhbHVlKSB7CisKKwljYXNlIChGUFcpIElOVEVMX01BTlVGQUNUOgorCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9JTlRFTDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CisJCWluZm8tPnNpemUgPSAwOworCQlhZGRyWzBdID0gKEZQVykgMHgwMEZGMDBGRjsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKwkJcmV0dXJuICgwKTsJCS8qIG5vIG9yIHVua25vd24gZmxhc2ggICovCisJfQorCisJbWIgKCk7CisJdmFsdWUgPSBhZGRyWzFdOwkvKiBkZXZpY2UgSUQgICAgICAgICovCisJc3dpdGNoICh2YWx1ZSkgeworCisJY2FzZSAoRlBXKSAoSU5URUxfSURfMjhGMjU2TDE4VCk6CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjI1NkwxOFQ7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDI1OTsKKwkJaW5mby0+c2l6ZSA9IDB4MDIwMDAwMDA7CisJCWJyZWFrOwkJCS8qID0+IDMyIE1CICAgICAqLworCisJZGVmYXVsdDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlpZiAoaW5mby0+c2VjdG9yX2NvdW50ID4gQ0ZHX01BWF9GTEFTSF9TRUNUKSB7CisJCXByaW50ZiAoIioqIEVSUk9SOiBzZWN0b3IgY291bnQgJWQgPiBtYXggKCVkKSAqKlxuIiwKKwkJCQlpbmZvLT5zZWN0b3JfY291bnQsIENGR19NQVhfRkxBU0hfU0VDVCk7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IENGR19NQVhfRkxBU0hfU0VDVDsKKwl9CisKKwlhZGRyWzBdID0gKEZQVykgMHgwMEZGMDBGRjsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKworCXJldHVybiAoaW5mby0+c2l6ZSk7Cit9CisKKworCisKKy8qIHVucHJvdGVjdHMgYSBzZWN0b3IgZm9yIHdyaXRlIGFuZCBlcmFzZQorICogb24gc29tZSBpbnRlbCBwYXJ0cywgdGhpcyB1bnByb3RlY3RzIHRoZSBlbnRpcmUgY2hpcCwgYnV0IGl0CisgKiB3b250IGh1cnQgdG8gY2FsbCB0aGlzIGFkZGl0aW9uYWwgdGltZXMgcGVyIHNlY3Rvci4uLgorICovCit2b2lkIGZsYXNoX3VucHJvdGVjdF9zZWN0b3JzIChGUFdWICogYWRkcikKK3sKKyNkZWZpbmUgUERfRklOVEVMX1dTTVNfUkVBRFlfTUFTSyAgICAweDAwODAKKworCSphZGRyID0gKEZQVykgMHgwMDUwMDA1MDsJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCisKKwkvKiB0aGlzIHNlbmRzIHRoZSBjbGVhciBsb2NrIGJpdCBjb21tYW5kICovCisJKmFkZHIgPSAoRlBXKSAweDAwNjAwMDYwOworCSphZGRyID0gKEZQVykgMHgwMEQwMDBEMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKK3sKKwlpbnQgZmxhZywgcHJvdCwgc2VjdDsKKwl1bG9uZyB0eXBlLCBzdGFydCwgbGFzdDsKKwlpbnQgcmNvZGUgPSAwOworCisJaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7CisJCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCQlwcmludGYgKCItIG1pc3NpbmdcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisKKwl0eXBlID0gKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spOworCWlmICgodHlwZSAhPSBGTEFTSF9NQU5fSU5URUwpKSB7CisJCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAlMDhseCAtIGFib3J0ZWRcbiIsCisJCQkJaW5mby0+Zmxhc2hfaWQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcm90ID0gMDsKKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgKytzZWN0KSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7CisJCQlwcm90Kys7CisJCX0KKwl9CisKKwlpZiAocHJvdCkgeworCQlwcmludGYgKCItIFdhcm5pbmc6ICVkIHByb3RlY3RlZCBzZWN0b3JzIHdpbGwgbm90IGJlIGVyYXNlZCFcbiIsCisJCQkJcHJvdCk7CisJfSBlbHNlIHsKKwkJcHJpbnRmICgiXG4iKTsKKwl9CisKKworCisKKwlzdGFydCA9IGdldF90aW1lciAoMCk7CisJbGFzdCA9IHN0YXJ0OworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKworCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsJLyogbm90IHByb3RlY3RlZCAqLworCQkJRlBXViAqYWRkciA9IChGUFdWICopIChpbmZvLT5zdGFydFtzZWN0XSk7CisJCQlGUFcgc3RhdHVzOworCisJCQlwcmludGYgKCJFcmFzaW5nIHNlY3RvciAlMmQgLi4uICIsIHNlY3QpOworCisJCQlmbGFzaF91bnByb3RlY3Rfc2VjdG9ycyAoYWRkcik7CisKKwkJCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCisJCQlyZXNldF90aW1lcl9tYXNrZWQgKCk7CisKKwkJCSphZGRyID0gKEZQVykgMHgwMDUwMDA1MDsvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCSphZGRyID0gKEZQVykgMHgwMDIwMDAyMDsvKiBlcmFzZSBzZXR1cCAqLworCQkJKmFkZHIgPSAoRlBXKSAweDAwRDAwMEQwOy8qIGVyYXNlIGNvbmZpcm0gKi8KKworCQkJd2hpbGUgKCgoc3RhdHVzID0KKwkJCQkqYWRkcikgJiAoRlBXKSAweDAwODAwMDgwKSAhPQorCQkJCShGUFcpIDB4MDA4MDAwODApIHsKKwkJCQkJaWYgKGdldF90aW1lcl9tYXNrZWQgKCkgPiAKKwkJCQkJQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKKwkJCQkJcHJpbnRmICgiVGltZW91dFxuIik7CisJCQkJCS8qIHN1c3BlbmQgZXJhc2UgICAgICovCisJCQkJCSphZGRyID0gKEZQVykgMHgwMEIwMDBCMDsKKwkJCQkJLyogcmVzZXQgdG8gcmVhZCBtb2RlICovCisJCQkJCSphZGRyID0gKEZQVykgMHgwMEZGMDBGRjsKKwkJCQkJcmNvZGUgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciBjbWQuICAgKi8KKwkJCSphZGRyID0gKEZQVykgMHgwMDUwMDA1MDsKKwkJCSphZGRyID0gKEZQVykgMHgwMEZGMDBGRjsvKiByZXNlc3QgdG8gcmVhZCBtb2RlICovCisJCQlwcmludGYgKCIgZG9uZVxuIik7CisJCX0KKwl9CisJcmV0dXJuIHJjb2RlOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5IG1lbW9yeSB0byBmbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKiA0IC0gRmxhc2ggbm90IGlkZW50aWZpZWQKKyAqLworCitpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgKiBzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKK3sKKwl1bG9uZyBjcCwgd3A7CisJRlBXIGRhdGE7CisJaW50IGNvdW50LCBpLCBsLCByYywgcG9ydF93aWR0aDsKKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXJldHVybiA0OworCX0KKy8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLworI2lmZGVmIEZMQVNIX1BPUlRfV0lEVEgxNgorCXdwID0gKGFkZHIgJiB+MSk7CisJcG9ydF93aWR0aCA9IDI7CisjZWxzZQorCXdwID0gKGFkZHIgJiB+Myk7CisJcG9ydF93aWR0aCA9IDQ7CisjZW5kaWYKKworCS8qCisJICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcworCSAqLworCWlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgeworCQlkYXRhID0gMDsKKwkJZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IGw7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCQl9CisJCWZvciAoOyBpIDwgcG9ydF93aWR0aCAmJiBjbnQgPiAwOyArK2kpIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJCS0tY250OworCQkJKytjcDsKKwkJfQorCQlmb3IgKDsgY250ID09IDAgJiYgaSA8IHBvcnRfd2lkdGg7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCQl9CisKKwkJaWYgKChyYyA9IHdyaXRlX2RhdGEgKGluZm8sIHdwLCBTV0FQIChkYXRhKSkpICE9IDApIHsKKwkJCXJldHVybiAocmMpOworCQl9CisJCXdwICs9IHBvcnRfd2lkdGg7CisJfQorCisJLyoKKwkgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKKwkgKi8KKwljb3VudCA9IDA7CisJd2hpbGUgKGNudCA+PSBwb3J0X3dpZHRoKSB7CisJCWRhdGEgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgcG9ydF93aWR0aDsgKytpKSB7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJCX0KKwkJaWYgKChyYyA9IHdyaXRlX2RhdGEgKGluZm8sIHdwLCBTV0FQIChkYXRhKSkpICE9IDApIHsKKwkJCXJldHVybiAocmMpOworCQl9CisJCXdwICs9IHBvcnRfd2lkdGg7CisJCWNudCAtPSBwb3J0X3dpZHRoOworCQlpZiAoY291bnQrKyA+IDB4ODAwKSB7CisJCQlzcGluX3doZWVsICgpOworCQkJY291bnQgPSAwOworCQl9CisJfQorCisJaWYgKGNudCA9PSAwKSB7CisJCXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKKwkgKi8KKwlkYXRhID0gMDsKKwlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgcG9ydF93aWR0aCAmJiBjbnQgPiAwOyArK2ksICsrY3ApIHsKKwkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCQktLWNudDsKKwl9CisJZm9yICg7IGkgPCBwb3J0X3dpZHRoOyArK2ksICsrY3ApIHsKKwkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCX0KKworCXJldHVybiAod3JpdGVfZGF0YSAoaW5mbywgd3AsIFNXQVAgKGRhdGEpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdyaXRlIGEgd29yZCBvciBoYWxmd29yZCB0byBGbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgRlBXIGRhdGEpCit7CisJRlBXViAqYWRkciA9IChGUFdWICopIGRlc3Q7CisJdWxvbmcgc3RhdHVzOworCWludCBmbGFnOworCisJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCisJaWYgKCgqYWRkciAmIGRhdGEpICE9IGRhdGEpIHsKKwkJcHJpbnRmICgibm90IGVyYXNlZCBhdCAlMDhseCAoJXgpXG4iLCAodWxvbmcpIGFkZHIsICphZGRyKTsKKwkJcmV0dXJuICgyKTsKKwl9CisJZmxhc2hfdW5wcm90ZWN0X3NlY3RvcnMgKGFkZHIpOworCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisJKmFkZHIgPSAoRlBXKSAweDAwNDAwMDQwOwkvKiB3cml0ZSBzZXR1cCAqLworCSphZGRyID0gZGF0YTsKKworCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCisJcmVzZXRfdGltZXJfbWFza2VkICgpOworCisJLyogd2FpdCB3aGlsZSBwb2xsaW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl3aGlsZSAoKChzdGF0dXMgPSAqYWRkcikgJiAoRlBXKSAweDAwODAwMDgwKSAhPSAoRlBXKSAweDAwODAwMDgwKSB7CisJCWlmIChnZXRfdGltZXJfbWFza2VkICgpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKKwkJCSphZGRyID0gKEZQVykgMHgwMEZGMDBGRjsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKwkJCXJldHVybiAoMSk7CisJCX0KKwl9CisJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCXJldHVybiAoMCk7Cit9CisKK3ZvaWQgaW5saW5lIHNwaW5fd2hlZWwgKHZvaWQpCit7CisJc3RhdGljIGludCBwID0gMDsKKwlzdGF0aWMgY2hhciB3W10gPSAiXFwvLSI7CisKKwlwcmludGYgKCJcMDEwJWMiLCB3W3BdKTsKKwkoKytwID09IDMpID8gKHAgPSAwKSA6IDA7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMTYxMGlubi9vbWFwMTYxMGlubm92YXRvci5jIGIvYm9hcmQvb21hcDE2MTBpbm4vb21hcDE2MTBpbm5vdmF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzM3ZjFiCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDE2MTBpbm4vb21hcDE2MTBpbm5vdmF0b3IuYwpAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CisgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBEYXZpZCBNdWVsbGVyLCBFTFNPRlQgQUcsIDxkLm11ZWxsZXJAZWxzb2Z0LmNoPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogS3NoaXRpaiBHdXB0YSA8S3NoaXRpakB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2lmIGRlZmluZWQoQ09ORklHX09NQVAxNjEwKQorI2luY2x1ZGUgPC4vY29uZmlncy9vbWFwMTUxMC5oPgorI2VuZGlmCisKK3ZvaWQgZmxhc2hfX2luaXQgKHZvaWQpOwordm9pZCBldGhlcl9faW5pdCAodm9pZCk7Cit2b2lkIHNldF9tdXhjb25mX3JlZ3MgKHZvaWQpOwordm9pZCBwZXJpcGhlcmFsX3Bvd2VyX2VuYWJsZSAodm9pZCk7CisKKyNkZWZpbmUgQ09NUF9NT0RFX0VOQUJMRSAoKHVuc2lnbmVkIGludCkweDAwMDBFQUVGKQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVsYXkgKHVuc2lnbmVkIGxvbmcgbG9vcHMpCit7CisJX19hc21fXyB2b2xhdGlsZSAoIjE6XG4iCisJCSJzdWJzICUwLCAlMSwgIzFcbiIKKwkJImJuZSAxYiI6Ij1yIiAobG9vcHMpOiIwIiAobG9vcHMpKTsKK30KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgcGxhdGZvcm0gZGVwZW5kZW50IGluaXRpYWxpc2F0aW9ucworICovCisKK2ludCBib2FyZF9pbml0ICh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJLyogYXJjaCBudW1iZXIgb2YgT01BUCAxNTEwLUJvYXJkICovCisJLyogdG8gYmUgY2hhbmdlZCBmb3IgT01BUCAxNjEwIEJvYXJkICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IDIzNDsKKworCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gMHgxMDAwMDEwMDsKKworCS8qIENvbmZpZ3VyZSBNVVggc2V0dGluZ3MgKi8KKwlzZXRfbXV4Y29uZl9yZWdzICgpOworCXBlcmlwaGVyYWxfcG93ZXJfZW5hYmxlICgpOworCisvKiB0aGlzIHNwZWVkcyB1cCB5b3VyIGJvb3QgYSBxdWl0ZSBhIGJpdC4gIEhvd2V2ZXIgdG8gbWFrZSBpdAorICogIHdvcmssIHlvdSBuZWVkIG1ha2Ugc3VyZSB5b3VyIGtlcm5lbCBzdGFydHVwIGZsdXNoIGJ1ZyBpcyBmaXhlZC4KKyAqICAuLi4gcmt3IC4uLgorICovCisJaWNhY2hlX2VuYWJsZSAoKTsKKworCWZsYXNoX19pbml0ICgpOworCWV0aGVyX19pbml0ICgpOworCXJldHVybiAwOworfQorCisKK2ludCBtaXNjX2luaXRfciAodm9pZCkKK3sKKwkvKiBjdXJyZW50bHkgZW1wdHkgKi8KKwlyZXR1cm4gKDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUm91dGluZToKKyBEZXNjcmlwdGlvbjoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZmxhc2hfX2luaXQgKHZvaWQpCit7CisjZGVmaW5lIEVNSUZTX0dsQl9Db25maWdfUkVHIDB4ZmZmZWNjMGMKKwl1bnNpZ25lZCBpbnQgcmVndmFsOworCXJlZ3ZhbCA9ICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSBFTUlGU19HbEJfQ29uZmlnX1JFRyk7CisJLyogVHVybiBvZmYgd3JpdGUgcHJvdGVjdGlvbiBmb3IgZmxhc2ggZGV2aWNlcy4gKi8KKwlyZWd2YWwgPSByZWd2YWwgfCAweDAwMDE7CisJKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIEVNSUZTX0dsQl9Db25maWdfUkVHKSA9IHJlZ3ZhbDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUm91dGluZTpldGhlcl9faW5pdAorIERlc2NyaXB0aW9uOiB0YWtlIHRoZSBFdGhlcm5ldCBjb250cm9sbGVyIG91dCBvZiByZXNldCBhbmQgd2FpdAorCSAgCQkgICBmb3IgdGhlIEVFUFJPTSBsb2FkIHRvIGNvbXBsZXRlLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZXRoZXJfX2luaXQgKHZvaWQpCit7CisjZGVmaW5lIEVUSF9DT05UUk9MX1JFRyAweDA0MDAwMDBiCisKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIEVUSF9DT05UUk9MX1JFRykgJj0gfjB4MDE7CisJdWRlbGF5ICgzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJvdXRpbmU6CisgRGVzY3JpcHRpb246CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZHJhbV9pbml0ICh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJvdXRpbmU6IHNldF9tdXhjb25mX3JlZ3MKKyBEZXNjcmlwdGlvbjogU2V0dGluZyB1cCB0aGUgY29uZmlndXJhdGlvbiBNdXggcmVnaXN0ZXJzCisgCQkJICBzcGVjaWZpYyB0byB0aGUgaGFyZHdhcmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHNldF9tdXhjb25mX3JlZ3MgKHZvaWQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpNdXhDb25mUmVnOworCS8qIHNldCBlYWNoIHJlZ2lzdGVycyB0byBpdHMgcmVzZXQgdmFsdWU7ICovCisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIEZVTkNfTVVYX0NUUkxfMCk7CisJLyogc2V0dXAgZm9yIFVBUlQxICovCisJKk11eENvbmZSZWcgJj0gfigweDAyMDAwMDAwKTsJLyogYml0IDI1ICovCisJLyogc2V0dXAgZm9yIFVBUlQyICovCisJKk11eENvbmZSZWcgJj0gfigweDAxMDAwMDAwKTsJLyogYml0IDI0ICovCisJLyogRGlzYWJsZSBVd2lyZSBDUyBIaS1aICovCisJKk11eENvbmZSZWcgfD0gMHgwODAwMDAwMDsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgRlVOQ19NVVhfQ1RSTF8zKTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIEZVTkNfTVVYX0NUUkxfNCk7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBGVU5DX01VWF9DVFJMXzUpOworCSpNdXhDb25mUmVnID0gMHgwMDAwMDAwMDsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgRlVOQ19NVVhfQ1RSTF82KTsKKwkvKnNldHVwIG11eCBmb3IgVUFSVDMgKi8KKwkqTXV4Q29uZlJlZyB8PSAweDAwMDAwMDAxOwkvKiBiaXQzLCAxLCAwIChtdXgwIDUsNSwyNikgKi8KKwkqTXV4Q29uZlJlZyAmPSB+MHgwMDAwMDAzZTsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgRlVOQ19NVVhfQ1RSTF83KTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIEZVTkNfTVVYX0NUUkxfOCk7CisJLyogRGlzYWJsZSBVd2lyZSBDUyBIaS1aICovCisJKk11eENvbmZSZWcgfD0gMHgwMDAwMTIwMDsJLypiaXQgOSBmb3IgQ1MwIDEyIGZvciBDUzMgKi8KKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgRlVOQ19NVVhfQ1RSTF85KTsKKwkvKiAgTmVlZCB0byB0dXJuIG9uIGJpdHMgMjEgYW5kIDEyIGluIEZVTkNfTVVYX0NUUkxfOSBzbyB0aGUgICovCisJLyogIGhhcmR3YXJlIHdpbGwgYWN0dWFsbHkgdXNlIFRYIGFuZCBSVFMgYmFzZWQgb24gYml0IDI1IGluICAqLworCS8qICBGVU5DX01VWF9DVFJMXzAuICBJIHRvbGQgeW91IHRoaXMgdGhpbmcgd2FzIHNjcmV3eSEgICovCisJKk11eENvbmZSZWcgfD0gMHgwMDIwMTAwMDsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgRlVOQ19NVVhfQ1RSTF9BKTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIEZVTkNfTVVYX0NUUkxfQik7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBGVU5DX01VWF9DVFJMX0MpOworCS8qIHNldHVwIGZvciBVQVJUMiAqLworCS8qICBOZWVkIHRvIHR1cm4gb24gYml0cyAyNyBhbmQgMjQgaW4gRlVOQ19NVVhfQ1RSTF9DIHNvIHRoZSAgKi8KKwkvKiAgaGFyZHdhcmUgd2lsbCBhY3R1YWxseSB1c2UgVFggYW5kIFJUUyBiYXNlZCBvbiBiaXQgMjQgaW4gICovCisJLyogIEZVTkNfTVVYX0NUUkxfMC4gKi8KKwkqTXV4Q29uZlJlZyB8PSAweDA5MDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBQVUxMX0RXTl9DVFJMXzApOworCSpNdXhDb25mUmVnID0gMHgwMDAwMDAwMDsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgUFVMTF9EV05fQ1RSTF8xKTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDAwMDA7CisJLyogbXV4IHNldHVwIGZvciBTRC9NTUMgZHJpdmVyICovCisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIFBVTExfRFdOX0NUUkxfMik7CisJKk11eENvbmZSZWcgJj0gMHhGRkZFMEZGRjsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgUFVMTF9EV05fQ1RSTF8zKTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIE1PRF9DT05GX0NUUkxfMCk7CisJLyogYml0IDEzIGZvciBNTUMyIFhPUl9DTEsgKi8KKwkqTXV4Q29uZlJlZyAmPSB+KDB4MDAwMDIwMDApOworCS8qIGJpdCAyOSBmb3IgVUFSVCAxICovCisJKk11eENvbmZSZWcgJj0gfigweDAwMDAyMDAwKTsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgRlVOQ19NVVhfQ1RSTF8wKTsKKwkvKiBDb25maWd1cmUgZm9yIFVTQi4gVHVybiBvbiBWQlVTX0NUUkwgYW5kIFZCVVNfTU9ERS4gKi8KKwkqTXV4Q29uZlJlZyB8PSAweDAwMEMwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KVVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKKwkqTXV4Q29uZlJlZyAmPSB+KDB4MDAwMDAwNzApOworCSpNdXhDb25mUmVnICY9IH4oMHgwMDAwMDAwOCk7CisJKk11eENvbmZSZWcgfD0gMHgwMDAwMDAwMzsKKwkqTXV4Q29uZlJlZyB8PSAweDAwMDAwMTgwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBNT0RfQ09ORl9DVFJMXzApOworCS8qIGJpdCAxNywgc29mdHdhcmUgY29udHJvbHMgVkJVUyAqLworCSpNdXhDb25mUmVnICY9IH4oMHgwMDAyMDAwMCk7CisJLyogRW5hYmxlIFVTQiA0OCBhbmQgMTJNIGNsb2NrcyAqLworCSpNdXhDb25mUmVnIHw9IDB4MDAwMDAyMDA7CisJKk11eENvbmZSZWcgJj0gfigweDAwMDAwMTgwKTsKKwkvKjIuNzVWIGZvciBNTUNTRElPMSAqLworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBWT0xUQUdFX0NUUkxfMCk7CisJKk11eENvbmZSZWcgPSAweDAwMDAxRkU3OworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBQVV9QRF9TRUxfMCk7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBQVV9QRF9TRUxfMSk7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBQVV9QRF9TRUxfMik7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBQVV9QRF9TRUxfMyk7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBQVV9QRF9TRUxfNCk7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBQVUxMX0RXTl9DVFJMXzQpOworCSpNdXhDb25mUmVnID0gMHgwMDAwMDAwMDsKKwkvKiBUdXJuIG9uIFVBUlQyIDQ4IE1IWiBjbG9jayAqLworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBNT0RfQ09ORl9DVFJMXzApOworCSpNdXhDb25mUmVnIHw9IDB4NDAwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIFVTQl9PVEdfQ1RSTCk7CisJLyogc2V0dXAgZm9yIFVTQiBWQnVzIGRldGVjdGlvbiBPTUFQMTYxeCAqLworCSpNdXhDb25mUmVnIHw9IDB4MDAwNDAwMDA7CS8qIGJpdCAxOCAqLworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBQVV9QRF9TRUxfMik7CisJLyogUHVsbFVwcyBmb3IgU0QvTU1DIGRyaXZlciAqLworCSpNdXhDb25mUmVnIHw9IH4oMHhGRkZFMEZGRik7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpQ09NUF9NT0RFX0NUUkxfMCk7CisJKk11eENvbmZSZWcgPSBDT01QX01PREVfRU5BQkxFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUm91dGluZTogcGVyaXBoZXJhbF9wb3dlcl9lbmFibGUKKyBEZXNjcmlwdGlvbjogRW5hYmxlIHRoZSBwb3dlciBmb3IgVUFSVDEKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHBlcmlwaGVyYWxfcG93ZXJfZW5hYmxlICh2b2lkKQoreworI2RlZmluZSBVQVJUMV80OE1IWl9FTkFCTEUJKCh1bnNpZ25lZCBzaG9ydCkweDAyMDApCisjZGVmaW5lIFNXX0NMT0NLX1JFUVVFU1QJKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKTB4RkZGRTA4MzQpCisKKwkqU1dfQ0xPQ0tfUkVRVUVTVCB8PSBVQVJUMV80OE1IWl9FTkFCTEU7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMTYxMGlubi9wbGF0Zm9ybS5TIGIvYm9hcmQvb21hcDE2MTBpbm4vcGxhdGZvcm0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTNmYzRmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDE2MTBpbm4vcGxhdGZvcm0uUwpAQCAtMCwwICsxLDM4NSBAQAorLyoKKyAqIEJvYXJkIHNwZWNpZmljIHNldHVwIGluZm8KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIEtzaGl0aWogR3VwdGEgPEtzaGl0aWpAdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQMTYxMCkKKyNpbmNsdWRlIDwuL2NvbmZpZ3Mvb21hcDE1MTAuaD4KKyNlbmRpZgorCisKK19URVhUX0JBU0U6CisJLndvcmQJVEVYVF9CQVNFCS8qIHNkcmFtIGxvYWQgYWRkciBmcm9tIGNvbmZpZy5tayAqLworCisuZ2xvYmwgcGxhdGZvcm1zZXR1cAorcGxhdGZvcm1zZXR1cDoKKworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisJICogU2V0IHVwIEFSTSBDTE0gcmVnaXN0ZXJzIChJRExFQ1QxKSAgICAgICAgICAgICAgICAgICAqCisJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWxkcglyMCwJUkVHX0FSTV9JRExFQ1QxCisJbGRyCXIxLAlWQUxfQVJNX0lETEVDVDEKKwlzdHIJcjEsCVtyMF0KKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorCSAqIFNldCB1cCBBUk0gQ0xNIHJlZ2lzdGVycyAoSURMRUNUMikgIAkJICAgICAgICAqCisJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWxkcglyMCwJUkVHX0FSTV9JRExFQ1QyCisJbGRyCXIxLAlWQUxfQVJNX0lETEVDVDIKKwlzdHIJcjEsCVtyMF0KKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorCSAqIFNldCB1cCBBUk0gQ0xNIHJlZ2lzdGVycyAoSURMRUNUMykJCSAgICAgICAgKgorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlsZHIJcjAsCVJFR19BUk1fSURMRUNUMworCWxkcglyMSwJVkFMX0FSTV9JRExFQ1QzCisJc3RyCXIxLAlbcjBdCisKKworCW1vdglyMSwJIzB4MDEJCS8qIFBFUl9FTiBiaXQgKi8KKwlsZHIJcjAsCVJFR19BUk1fUlNUQ1QyCisJc3RyaAlyMSwJW3IwXQkJLyogQ0xLTTsgUGVyaXBoZXJhbCByZXNldC4gKi8KKworCS8qIFNldCBDTEtNIHRvIFN5bmMtU2NhbGFibGUJKi8KKwkvKiBJIHN1cHBvc2VkbHkgbmVlZCB0byBlbmFibGUgdGhlIGRzcCBjbG9jayBiZWZvcmUgc3dpdGNoaW5nICovCisJbW92CXIxLAkjMHgwMDAwCisJbGRyCXIwLAlSRUdfQVJNX1NZU1NUCisJc3RyaAlyMSwJW3IwXQorCW1vdglyMCwJIzB4NDAwCisxOgorCXN1YnMJcjAsCXIwLAkjMHgxCS8qIHdhaXQgZm9yIGFueSBidWJibGVzIHRvIGZpbmlzaCAqLworCWJuZQkxYgorCWxkcglyMSwJVkFMX0FSTV9DS0NUTAorCWxkcglyMCwJUkVHX0FSTV9DS0NUTAorCXN0cmgJcjEsCVtyMF0KKworCS8qIGEgZmV3IG5vcHMgdG8gbGV0IHNldHRsZSAqLworCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCisJLyogc2V0dXAgRFBMTCAxICovCisJLyogUmFtcCB1cCB0aGUgY2xvY2sgdG8gOTZNaHogKi8KKwlsZHIJcjEsCVZBTF9EUExMMV9DVEwKKwlsZHIJcjAsCVJFR19EUExMMV9DVEwKKwlzdHJoCXIxLAlbcjBdCisJYW5kcwlyMSwJcjEsCSMweDEwCS8qIENoZWNrIGlmIFBMTCBpcyBlbmFibGVkLiAqLworCWJlcQlsb2NrX2VuZAkvKiBEbyBub3QgbG9vayBmb3IgbG9jayBpZiBCWVBBU1Mgc2VsZWN0ZWQgKi8KKzI6CisJbGRyaAlyMSwJW3IwXQorCWFuZHMJcjEsCXIxLAkjMHgwMQkvKglDaGVjayB0aGUgTE9DSyBiaXQuKi8KKwliZXEgMmIJCQkvKglsb29wIHVudGlsIGJpdCBnb2VzIGhpLiAqLworbG9ja19lbmQ6CisKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorCSAqIFR1cm4gb2ZmIHRoZSB3YXRjaGRvZyBkdXJpbmcgaW5pdC4uLgkJCSoKKyAJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWxkcglyMCwJUkVHX1dBVENIRE9HCisJbGRyCXIxLAlXQVRDSERPR19WQUwxCisJc3RyCXIxLAlbcjBdCisJbGRyCXIxLAlXQVRDSERPR19WQUwyCisJc3RyCXIxLAlbcjBdCisJbGRyCXIwLAlSRUdfV1NQUkRPRworCWxkcglyMSwJV1NQUkRPR19WQUwxCisJc3RyCXIxLAlbcjBdCisJbGRyCXIwLAlSRUdfV1dQU0RPRworCit3YXRjaDFXYWl0OgorCWxkcglyMSwJW3IwXQorCXRzdAlyMSwJIzB4MTAKKwlibmUJd2F0Y2gxV2FpdAorCisJbGRyCXIwLAlSRUdfV1NQUkRPRworCWxkcglyMSwJV1NQUkRPR19WQUwyCisJc3RyCXIxLAlbcjBdCisJbGRyCXIwLAlSRUdfV1dQU0RPRword2F0Y2gyV2FpdDoKKwlsZHIJcjEsCVtyMF0KKwl0c3QJcjEsCSMweDEwCisJYm5lCXdhdGNoMldhaXQKKworCisKKworCS8qIFNldCBtZW1vcnkgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBuZXcgY2xvY2sgc3BlZWQgKi8KKworCS8qIENoZWNrIGV4ZWN1dGlvbiBsb2NhdGlvbiB0byBkZXRlcm1pbmUgY3VycmVudCBleGVjdXRpb24gbG9jYXRpb24KKwkgKiBhbmQgYnJhbmNoIHRvIGFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIGNvZGUuCisJICovCisJLyogTG9hZCBwaHlzaWNhbCBTRFJBTSBiYXNlLiAqLworCW1vdiAJcjAsIAkjMHgxMDAwMDAwMAorCS8qIEdldCBjdXJyZW50IGV4ZWN1dGlvbiBsb2NhdGlvbi4gKi8KKwltb3YgCXIxLCAJcGMKKwkvKiBDb21wYXJlLiAqLworCWNtcCAJcjEsIAlyMAorCS8qIFNraXAgb3ZlciBFTUlGLWZhc3QgaW5pdGlhbGl6YXRpb24gaWYgcnVubmluZyBmcm9tIFNEUkFNLiAqLworCWJnZSAJc2tpcF9zZHJhbQorCisJLyoKKwkqIERlbGF5IGZvciBTRFJBTSBpbml0aWFsaXphdGlvbi4KKwkqLworCW1vdglyMywJIzB4MTgwMAkJLyogdmFsdWUgc2hvdWxkIGJlIGNoZWNrZWQgKi8KKzM6CisJc3VicwlyMywJcjMsCSMweDEJLyogRGVjcmVtZW50IGNvdW50ICovCisJYm5lIAkzYgorCisKKwkvKgorCSAqIFNldCBTRFJBTSBjb250cm9sIHZhbHVlcy4gRGlzYWJsZSByZWZyZXNoIGJlZm9yZSBNUlMgY29tbWFuZC4KKwkgKi8KKworCS8qIG1vYmlsZSBkZHIgb3BlcmF0aW9uICovCisJbGRyCXIwLAlSRUdfU0RSQU1fT1BFUkFUSU9OCisJbW92CXIyLAkjMDcKKwlzdHIJcjIsCVtyMF0KKworCS8qIGNvbmZpZyByZWdpc3RlciAqLworCWxkcglyMCwJUkVHX1NEUkFNX0NPTkZJRworCWxkcglyMSwJU0RSQU1fQ09ORklHX1ZBTAorCXN0cglyMSwJW3IwXQorCisJLyogbWFudWFsIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKwlsZHIJcjAsCVJFR19TRFJBTV9NQU5VQUxfQ01ECisJLyogaXNzdWUgc2V0IGNrZSBoaWdoICovCisJbW92CXIxLAkjQ01EX1NEUkFNX0NLRV9TRVRfSElHSAorCXN0cglyMSwJW3IwXQorCS8qIGlzc3VlIG5vcCAqLworCW1vdglyMSwJI0NNRF9TRFJBTV9OT1AKKwlzdHIJcjEsCVtyMF0KKworCW1vdglyMiwJIzB4MDEwMAord2FpdE1ERFIxOgorCXN1YnMJcjIsCXIyLAkgIzEKKwlibmUJd2FpdE1ERFIxCS8qIGRlbGF5IGxvb3AgKi8KKworCS8qIGlzc3VlIHByZWNoYXJnZSAqLworCW1vdglyMSwJI0NNRF9TRFJBTV9QUkVDSEFSR0UKKwlzdHIJcjEsCVtyMF0KKworCS8qIGlzc3VlIGF1dG9yZWZyZXNoIHggMiAqLworCW1vdglyMSwJI0NNRF9TRFJBTV9BVVRPUkVGUkVTSAorCXN0cglyMSwJW3IwXQorCXN0cglyMSwJW3IwXQorCisJLyogbXJzIHJlZ2lzdGVyIGRkciBtb2JpbGUgKi8KKwlsZHIJcjAsCVJFR19TRFJBTV9NUlMKKwltb3YJcjEsCSMweDMzCisJc3RyCXIxLAlbcjBdCisKKwkvKiBlbXJzMSBsb3ctcG93ZXIgcmVnaXN0ZXIgKi8KKwlsZHIJcjAsCVJFR19TRFJBTV9FTVJTMQorCS8qIHNlbGYgcmVmcmVzaCBvbiBhbGwgYmFua3MgKi8KKwltb3YJcjEsCSMwCisJc3RyCXIxLAlbcjBdCisKKwlsZHIJcjAsCVJFR19ETExfVVJEX0NPTlRST0wKKwlsZHIJcjEsCURMTF9VUkRfQ09OVFJPTF9WQUwKKwlzdHIJcjEsCVtyMF0KKworCWxkcglyMCwJUkVHX0RMTF9MUkRfQ09OVFJPTAorCWxkcglyMSwJRExMX0xSRF9DT05UUk9MX1ZBTAorCXN0cglyMSwJW3IwXQorCisJbGRyCXIwLAlSRUdfRExMX1dSVF9DT05UUk9MCisJbGRyCXIxLAlETExfV1JUX0NPTlRST0xfVkFMCisJc3RyCXIxLAlbcjBdCisKKwkvKiBkZWxheSBsb29wICovCisJbW92CXIyLAkjMHgwMTAwCit3YWl0TUREUjI6CisJc3VicwlyMiwJcjIsCSMxCisJYm5lCXdhaXRNRERSMgorCisJLyoKKwkgKiBEZWxheSBmb3IgU0RSQU0gaW5pdGlhbGl6YXRpb24uCisJICovCisJbW92CXIzLAkjMHgxODAwCis0OgorCXN1YnMJcjMsCXIzLAkjMQkvKiBEZWNyZW1lbnQgY291bnQuICovCisJYm5lCTRiCisJYgljb21tb25fdGMKKworc2tpcF9zZHJhbToKKworCWxkcglyMCwJUkVHX1NEUkFNX0NPTkZJRworCWxkcglyMSwJU0RSQU1fQ09ORklHX1ZBTAorCXN0cglyMSwJW3IwXQorCitjb21tb25fdGM6CisJLyogc2xvdyBpbnRlcmZhY2UgKi8KKwlsZHIJcjEsCVZBTF9UQ19FTUlGU19DUzBfQ09ORklHCisJbGRyCXIwLAlSRUdfVENfRU1JRlNfQ1MwX0NPTkZJRworCXN0cglyMSwJW3IwXSAvKiBDaGlwIFNlbGVjdCAwICovCisKKwlsZHIJcjEsCVZBTF9UQ19FTUlGU19DUzFfQ09ORklHCisJbGRyCXIwLAlSRUdfVENfRU1JRlNfQ1MxX0NPTkZJRworCXN0cglyMSwJW3IwXSAvKiBDaGlwIFNlbGVjdCAxICovCisJbGRyCXIxLAlWQUxfVENfRU1JRlNfQ1MzX0NPTkZJRworCWxkcglyMCwJUkVHX1RDX0VNSUZTX0NTM19DT05GSUcKKwlzdHIJcjEsCVtyMF0gLyogQ2hpcCBTZWxlY3QgMyAqLworCS8qIGJhY2sgdG8gYXJjaCBjYWxsaW5nIGNvZGUgKi8KKwltb3YJcGMsCWxyCisKKwkvKiB0aGUgbGl0ZXJhbCBwb29scyBvcmlnaW4gKi8KKwkubHRvcmcKKworCitSRUdfVENfRU1JRlNfQ09ORklHOgkJLyogMzIgYml0cyAqLworCS53b3JkIDB4ZmZmZWNjMGMKK1JFR19UQ19FTUlGU19DUzBfQ09ORklHOgkvKiAzMiBiaXRzICovCisJLndvcmQgMHhmZmZlY2MxMAorUkVHX1RDX0VNSUZTX0NTMV9DT05GSUc6CS8qIDMyIGJpdHMgKi8KKwkud29yZCAweGZmZmVjYzE0CitSRUdfVENfRU1JRlNfQ1MyX0NPTkZJRzoJLyogMzIgYml0cyAqLworCS53b3JkIDB4ZmZmZWNjMTgKK1JFR19UQ19FTUlGU19DUzNfQ09ORklHOgkvKiAzMiBiaXRzICovCisJLndvcmQgMHhmZmZlY2MxYworCisvKiBNUFUgY2xvY2svcmVzZXQvcG93ZXIgbW9kZSBjb250cm9sIHJlZ2lzdGVycyAqLworUkVHX0FSTV9DS0NUTDoJCQkvKiAxNiBiaXRzICovCisJLndvcmQgMHhmZmZlY2UwMAorCitSRUdfQVJNX0lETEVDVDM6CQkvKiAxNiBiaXRzICovCisJLndvcmQgMHhmZmZlY2UyNAorUkVHX0FSTV9JRExFQ1QyOgkJLyogMTYgYml0cyAqLworCS53b3JkIDB4ZmZmZWNlMDggICAgICAgIAorUkVHX0FSTV9JRExFQ1QxOgkJLyogMTYgYml0cyAqLworCS53b3JkIDB4ZmZmZWNlMDQKKworUkVHX0FSTV9SU1RDVDI6CQkJLyogMTYgYml0cyAqLworCS53b3JkIDB4ZmZmZWNlMTQKK1JFR19BUk1fU1lTU1Q6CQkJLyogMTYgYml0cyAqLworCS53b3JkIDB4ZmZmZWNlMTgKKy8qIERQTEwgY29udHJvbCByZWdpc3RlcnMgKi8KK1JFR19EUExMMV9DVEw6CQkJLyogMTYgYml0cyAqLworCS53b3JkIDB4ZmZmZWNmMDAKKworLyogV2F0Y2ggRG9nIHJlZ2lzdGVyICovCisvKiBzZWN1cmUgd2F0Y2hkb2cgc3RvcCAqLworUkVHX1dTUFJET0c6CisJLndvcmQgMHhmZmZlYjA0OAorLyogd2F0Y2hkb2cgd3JpdGUgcGVuZGluZyAqLworUkVHX1dXUFNET0c6CisJLndvcmQgMHhmZmZlYjAzNCAKKworV1NQUkRPR19WQUwxOgorCS53b3JkIDB4MDAwMGFhYWEKK1dTUFJET0dfVkFMMjoKKwkud29yZCAweDAwMDA1NTU1CisKKy8qIFNEUkFNIGNvbmZpZyBpczogYXV0byByZWZyZXNoIGVuYWJsZWQsIDE2IGJpdCA0IGJhbmssCisgY291bnRlciBAODE5MiByb3dzLCAxMCBucywgOCBidXJzdCAqLworUkVHX1NEUkFNX0NPTkZJRzoKKwkud29yZCAweGZmZmVjYzIwCisKKy8qIE9wZXJhdGlvbiByZWdpc3RlciAqLworUkVHX1NEUkFNX09QRVJBVElPTjoKKwkud29yZCAweGZmZmVjYzgwCisKKy8qIE1hbnVhbCBjb21tYW5kIHJlZ2lzdGVyICovCitSRUdfU0RSQU1fTUFOVUFMX0NNRDoKKwkud29yZCAweGZmZmVjYzg0CisKKy8qIFNEUkFNIE1SUyAoTmV3KSBjb25maWcgaXM6IENBUyBsYXRlbmN5IGlzIDIsIGJ1cnN0IGxlbmd0aCA4ICovCitSRUdfU0RSQU1fTVJTOgorCS53b3JkIDB4ZmZmZWNjNzAKKworLyogU0RSQU0gTVJTIChOZXcpIGNvbmZpZyBpczogQ0FTIGxhdGVuY3kgaXMgMiwgYnVyc3QgbGVuZ3RoIDggKi8KK1JFR19TRFJBTV9FTVJTMToKKwkud29yZCAweGZmZmVjYzc4CisKKy8qIFdSVCBETEwgcmVnaXN0ZXIgKi8KK1JFR19ETExfV1JUX0NPTlRST0w6CisJLndvcmQgMHhmZmZlY2M2OAorRExMX1dSVF9DT05UUk9MX1ZBTDoKKwkud29yZCAweDAzZjAwMDAyCisKKy8qIFVSRCBETEwgcmVnaXN0ZXIgKi8KK1JFR19ETExfVVJEX0NPTlRST0w6CisJLndvcmQgMHhmZmZlY2NjMAorRExMX1VSRF9DT05UUk9MX1ZBTDoKKwkud29yZCAweDAwODAwMDAyCisKKy8qIExSRCBETEwgcmVnaXN0ZXIgKi8KK1JFR19ETExfTFJEX0NPTlRST0w6CisJLndvcmQgMHhmZmZlY2NjYworCitSRUdfV0FUQ0hET0c6CisJLndvcmQgMHhmZmZlYzgwOAorCisvKiA5NiBNSHogU2Ftc3VuZyBNb2JpbGUgRERSICovCitTRFJBTV9DT05GSUdfVkFMOgorCS53b3JkIDB4MDAxMjAwZjQgCisKK0RMTF9MUkRfQ09OVFJPTF9WQUw6CisJLndvcmQgMHgwMDgwMDAwMgorCitWQUxfQVJNX0NLQ1RMOgorCS53b3JkIDB4MzAwMAorVkFMX0RQTEwxX0NUTDoKKwkud29yZCAweDI4MzAKKworVkFMX1RDX0VNSUZTX0NTMF9DT05GSUc6CisJLndvcmQgMHgwMDIxMzBiMAorVkFMX1RDX0VNSUZTX0NTMV9DT05GSUc6CisJLndvcmQgMHgwMDAwMTEzMQorVkFMX1RDX0VNSUZTX0NTMl9DT05GSUc6CisJLndvcmQgMHgwMDAwNTVmMAorVkFMX1RDX0VNSUZTX0NTM19DT05GSUc6CisJLndvcmQgMHg4ODAxMTEzMQorVkFMX1RDX0VNSUZGX1NEUkFNX0NPTkZJRzoKKwkud29yZCAweDAxMDI5MGZjCitWQUxfVENfRU1JRkZfTVJTOgorCS53b3JkIDB4MDAwMDAwMjcKKworVkFMX0FSTV9JRExFQ1QxOgorCS53b3JkIDB4MDAwMDA0MDAKKworVkFMX0FSTV9JRExFQ1QyOgorCS53b3JkIDB4MDAwMDA4ODYKK1ZBTF9BUk1fSURMRUNUMzoKKwkud29yZCAweDAwMDAwMDE1CisKK1dBVENIRE9HX1ZBTDE6CisJLndvcmQgMHgwMDAwMDBmNQorV0FUQ0hET0dfVkFMMjoKKwkud29yZCAweDAwMDAwMGEwCisKKy8qIGNvbW1hbmQgdmFsdWVzICovCisuZXF1IENNRF9TRFJBTV9OT1AsCQkweDAwMDAwMDAwCisuZXF1IENNRF9TRFJBTV9QUkVDSEFSR0UsCTB4MDAwMDAwMDEKKy5lcXUgQ01EX1NEUkFNX0FVVE9SRUZSRVNILAkweDAwMDAwMDAyCisuZXF1IENNRF9TRFJBTV9DS0VfU0VUX0hJR0gsCTB4MDAwMDAwMDcKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAxNjEwaW5uL3UtYm9vdC5sZHMgYi9ib2FyZC9vbWFwMTYxMGlubi91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNDYwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMTYxMGlubi91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS4gPSAweDAwMDAwMDAwOworCS4gPSBBTElHTig0KTsKKwkudGV4dAk6CisJeworCSAgY3B1L2FybTkyNmVqcy9zdGFydC5vCSgudGV4dCkKKwkgICooLnRleHQpCisJfQorCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisJCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCQorCWFybWJvb3RfZW5kX2RhdGEgPSAuOworCS4gPSBBTElHTig0KTsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlhcm1ib290X2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9jcHUvYXJtOTI2ZWpzL01ha2VmaWxlIGIvY3B1L2FybTkyNmVqcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDMyNzhlCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyNmVqcy9NYWtlZmlsZQpAQCAtMCwwICsxLDQzIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKENQVSkuYQorCitTVEFSVAk9IHN0YXJ0Lm8KK09CSlMJPSBpbnRlcnJ1cHRzLm8gY3B1Lm8KKworYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorCiskKExJQik6CSQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy5kZXBlbmQ6CU1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykKKwkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCitzaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjZlanMvY29uZmlnLm1rIGIvY3B1L2FybTkyNmVqcy9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmN2QyNgotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjZlanMvY29uZmlnLm1rCkBAIC0wLDAgKzEsMjcgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAyCisjIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworUExBVEZPUk1fUkVMRkxBR1MgKz0gLWZuby1zdHJpY3QtYWxpYXNpbmcgIC1mbm8tY29tbW9uIC1mZml4ZWQtcjggXAorCS1tc2hvcnQtbG9hZC1ieXRlcyAtbXNvZnQtZmxvYXQKKworUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1hcGNzLTMyIC1tYXJjaD1hcm12NApkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNmVqcy9jcHUuYyBiL2NwdS9hcm05MjZlanMvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkxYWEzNwotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjZlanMvY3B1LmMKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBDUFUgc3BlY2lmaWMgY29kZQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXJtOTI2ZWpzLmg+CisKKy8qIHJlYWQgY28tcHJvY2Vzc29yIDE1LCByZWdpc3RlciAjMSAoY29udHJvbCByZWdpc3RlcikgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfcDE1X2MxICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIm1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDAgICBAIHJlYWQgY29udHJvbCByZWdcbiIKKwkJOiAiPXIiICh2YWx1ZSkKKwkJOgorCQk6ICJtZW1vcnkiKTsKKworI2lmZGVmIE1NVV9ERUJVRworCXByaW50ZiAoInAxNS9jMSBpcyA9ICUwOGx4XG4iLCB2YWx1ZSk7CisjZW5kaWYKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qIHdyaXRlIHRvIGNvLXByb2Nlc3NvciAxNSwgcmVnaXN0ZXIgIzEgKGNvbnRyb2wgcmVnaXN0ZXIpICovCitzdGF0aWMgdm9pZCB3cml0ZV9wMTVfYzEgKHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisjaWZkZWYgTU1VX0RFQlVHCisJcHJpbnRmICgid3JpdGUgJTA4bHggdG8gcDE1L2MxXG4iLCB2YWx1ZSk7CisjZW5kaWYKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIm1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDAgICBAIHdyaXRlIGl0IGJhY2tcbiIKKwkJOgorCQk6ICJyIiAodmFsdWUpCisJCTogIm1lbW9yeSIpOworCisJcmVhZF9wMTVfYzEgKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNwX2RlbGF5ICh2b2lkKQoreworCXZvbGF0aWxlIGludCBpOworCisJLyogTWFueSBPTUFQIHJlZ3MgbmVlZCBhdCBsZWFzdCAyIG5vcHMgICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKTsKK30KKworLyogU2VlIGFsc28gQVJNIFJlZi4gTWFuLiAqLworI2RlZmluZSBDMV9NTVUJCSgxPDwwKQkJLyogbW11IG9mZi9vbiAqLworI2RlZmluZSBDMV9BTElHTgkoMTw8MSkJCS8qIGFsaWdubWVudCBmYXVsdHMgb2ZmL29uICovCisjZGVmaW5lIEMxX0RDCQkoMTw8MikJCS8qIGRjYWNoZSBvZmYvb24gKi8KKyNkZWZpbmUgQzFfV0IJCSgxPDwzKQkJLyogbWVyZ2luZyB3cml0ZSBidWZmZXIgb24vb2ZmICovCisjZGVmaW5lIEMxX0JJR19FTkRJQU4JKDE8PDcpCS8qIGJpZyBlbmRpYW4gb2ZmL29uICovCisjZGVmaW5lIEMxX1NZU19QUk9UCSgxPDw4KQkJLyogc3lzdGVtIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgQzFfUk9NX1BST1QJKDE8PDkpCQkvKiBST00gcHJvdGVjdGlvbiAqLworI2RlZmluZSBDMV9JQwkJKDE8PDEyKQkJLyogaWNhY2hlIG9mZi9vbiAqLworI2RlZmluZSBDMV9ISUdIX1ZFQ1RPUlMJKDE8PDEzKQkvKiBsb2NhdGlvbiBvZiB2ZWN0b3JzOiBsb3cvaGlnaCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgUkVTRVJWRURfMQkoMHhmIDw8IDMpCS8qIG11c3QgYmUgMTExYiBmb3IgUi9XICovCisKK2ludCBjcHVfaW5pdCAodm9pZCkKK3sKKwkvKgorCSAqIHNldHVwIHVwIHN0YWNrIGlmIG5lY2Vzc2FyeQorCSAqLworI2lmZGVmIENPTkZJR19VU0VfSVJRCisJSVJRX1NUQUNLX1NUQVJUID0gX2FybWJvb3RfZW5kICsKKwkJCUNPTkZJR19TVEFDS1NJWkUgKyBDT05GSUdfU1RBQ0tTSVpFX0lSUSAtIDQ7CisJRklRX1NUQUNLX1NUQVJUID0gSVJRX1NUQUNLX1NUQVJUICsgQ09ORklHX1NUQUNLU0laRV9GSVE7CisJX2FybWJvb3RfcmVhbF9lbmQgPSBGSVFfU1RBQ0tfU1RBUlQgKyA0OworI2Vsc2UKKwlfYXJtYm9vdF9yZWFsX2VuZCA9IF9hcm1ib290X2VuZCArIENPTkZJR19TVEFDS1NJWkU7CisjZW5kaWYJLyogQ09ORklHX1VTRV9JUlEgKi8KKwlyZXR1cm4gKDApOworfQorCitpbnQgY2xlYW51cF9iZWZvcmVfbGludXggKHZvaWQpCit7CisJLyoKKwkgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB3ZSBjYWxsIGxpbnV4CisJICogaXQgcHJlcGFyZXMgdGhlIHByb2Nlc3NvciBmb3IgbGludXgKKwkgKgorCSAqIHdlIHR1cm4gb2ZmIGNhY2hlcyBldGMgLi4uCisJICovCisKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlkaXNhYmxlX2ludGVycnVwdHMgKCk7CisKKwkvKiB0dXJuIG9mZiBJL0QtY2FjaGUgKi8KKwlhc20gKCJtcmMgcDE1LCAwLCAlMCwgYzEsIGMwLCAwIjoiPXIiIChpKSk7CisJaSAmPSB+KEMxX0RDIHwgQzFfSUMpOworCWFzbSAoIm1jciBwMTUsIDAsICUwLCBjMSwgYzAsIDAiOiA6InIiIChpKSk7CisKKwkvKiBmbHVzaCBJL0QtY2FjaGUgKi8KKwlpID0gMDsKKwlhc20gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM3LCAwIjogOiJyIiAoaSkpOworCXJldHVybiAoMCk7Cit9CisKK2ludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0ZXJuIHZvaWQgcmVzZXRfY3B1ICh1bG9uZyBhZGRyKTsKKworCWRpc2FibGVfaW50ZXJydXB0cyAoKTsKKwlyZXNldF9jcHUgKDApOworCS8qTk9UUkVBQ0hFRCovCisJcmV0dXJuICgwKTsKK30KKwordm9pZCBpY2FjaGVfZW5hYmxlICh2b2lkKQoreworCXVsb25nIHJlZzsKKworCXJlZyA9IHJlYWRfcDE1X2MxICgpOwkJLyogZ2V0IGNvbnRyb2wgcmVnLiAqLworCWNwX2RlbGF5ICgpOworCXdyaXRlX3AxNV9jMSAocmVnIHwgQzFfSUMpOworfQorCit2b2lkIGljYWNoZV9kaXNhYmxlICh2b2lkKQoreworCXVsb25nIHJlZzsKKworCXJlZyA9IHJlYWRfcDE1X2MxICgpOworCWNwX2RlbGF5ICgpOworCXdyaXRlX3AxNV9jMSAocmVnICYgfkMxX0lDKTsKK30KKworaW50IGljYWNoZV9zdGF0dXMgKHZvaWQpCit7CisJcmV0dXJuIChyZWFkX3AxNV9jMSAoKSAmIEMxX0lDKSAhPSAwOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNmVqcy9pbnRlcnJ1cHRzLmMgYi9jcHUvYXJtOTI2ZWpzL2ludGVycnVwdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDA4NmRkCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyNmVqcy9pbnRlcnJ1cHRzLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CisgKiBBbGV4IFp1ZXBrZSA8YXp1QHN5c2dvLmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhcm05MjV0Lmg+CisjaW5jbHVkZSA8Y29uZmlncy9vbWFwMTUxMC5oPgorCisjaW5jbHVkZSA8YXNtL3Byb2MtYXJtdi9wdHJhY2UuaD4KKworZXh0ZXJuIHZvaWQgcmVzZXRfY3B1KHVsb25nIGFkZHIpOworI2RlZmluZSBUSU1FUl9MT0FEX1ZBTCAweGZmZmZmZmZmCisKKy8qIG1hY3JvIHRvIHJlYWQgdGhlIDMyIGJpdCB0aW1lciAqLworI2RlZmluZSBSRUFEX1RJTUVSICgqKHZvbGF0aWxlIHVsb25nICopKENGR19USU1FUkJBU0UrOCkpCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorLyogZW5hYmxlIElSUSBpbnRlcnJ1cHRzICovCit2b2lkIGVuYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJzICUwLCBjcHNyXG4iCisJCSJiaWMgJTAsICUwLCAjMHg4MFxuIgorCQkibXNyIGNwc3JfYywgJTAiCisJCTogIj1yIiAodGVtcCkKKwkJOiAibWVtb3J5Iik7Cit9CisKKy8qCisgKiBkaXNhYmxlIElSUS9GSVEgaW50ZXJydXB0cworICogcmV0dXJucyB0cnVlIGlmIGludGVycnVwdHMgaGFkIGJlZW4gZW5hYmxlZCBiZWZvcmUgd2UgZGlzYWJsZWQgdGhlbQorICovCitpbnQgZGlzYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgb2xkLHRlbXA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1ycyAlMCwgY3BzclxuIgorCQkib3JyICUxLCAlMCwgIzB4YzBcbiIKKwkJIm1zciBjcHNyX2MsICUxIgorCQk6ICI9ciIgKG9sZCksICI9ciIgKHRlbXApCisJCTogIm1lbW9yeSIpOworCXJldHVybiAob2xkICYgMHg4MCkgPT0gMDsKK30KKyNlbHNlCit2b2lkIGVuYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQoreworCXJldHVybjsKK30KK2ludCBkaXNhYmxlX2ludGVycnVwdHMgKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisKK3ZvaWQgYmFkX21vZGUgKHZvaWQpCit7CisJcGFuaWMgKCJSZXNldHRpbmcgQ1BVIC4uLlxuIik7CisJcmVzZXRfY3B1ICgwKTsKK30KKwordm9pZCBzaG93X3JlZ3MgKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY29uc3QgY2hhciAqcHJvY2Vzc29yX21vZGVzW10gPSB7CisJIlVTRVJfMjYiLAkiRklRXzI2IiwJIklSUV8yNiIsCSJTVkNfMjYiLAorCSJVSzRfMjYiLAkiVUs1XzI2IiwJIlVLNl8yNiIsCSJVSzdfMjYiLAorCSJVSzhfMjYiLAkiVUs5XzI2IiwJIlVLMTBfMjYiLAkiVUsxMV8yNiIsCisJIlVLMTJfMjYiLAkiVUsxM18yNiIsCSJVSzE0XzI2IiwJIlVLMTVfMjYiLAorCSJVU0VSXzMyIiwJIkZJUV8zMiIsCSJJUlFfMzIiLAkiU1ZDXzMyIiwKKwkiVUs0XzMyIiwJIlVLNV8zMiIsCSJVSzZfMzIiLAkiQUJUXzMyIiwKKwkiVUs4XzMyIiwJIlVLOV8zMiIsCSJVSzEwXzMyIiwJIlVORF8zMiIsCisJIlVLMTJfMzIiLAkiVUsxM18zMiIsCSJVSzE0XzMyIiwJIlNZU18zMiIsCisJfTsKKworCWZsYWdzID0gY29uZGl0aW9uX2NvZGVzIChyZWdzKTsKKworCXByaW50ZiAoInBjIDogWzwlMDhseD5dICAgIGxyIDogWzwlMDhseD5dXG4iCisJCSJzcCA6ICUwOGx4ICBpcCA6ICUwOGx4ICBmcCA6ICUwOGx4XG4iLAorCQlpbnN0cnVjdGlvbl9wb2ludGVyIChyZWdzKSwKKwkJcmVncy0+QVJNX2xyLCByZWdzLT5BUk1fc3AsIHJlZ3MtPkFSTV9pcCwgcmVncy0+QVJNX2ZwKTsKKwlwcmludGYgKCJyMTA6ICUwOGx4ICByOSA6ICUwOGx4ICByOCA6ICUwOGx4XG4iLAorCQlyZWdzLT5BUk1fcjEwLCByZWdzLT5BUk1fcjksIHJlZ3MtPkFSTV9yOCk7CisJcHJpbnRmICgicjcgOiAlMDhseCAgcjYgOiAlMDhseCAgcjUgOiAlMDhseCAgcjQgOiAlMDhseFxuIiwKKwkJcmVncy0+QVJNX3I3LCByZWdzLT5BUk1fcjYsIHJlZ3MtPkFSTV9yNSwgcmVncy0+QVJNX3I0KTsKKwlwcmludGYgKCJyMyA6ICUwOGx4ICByMiA6ICUwOGx4ICByMSA6ICUwOGx4ICByMCA6ICUwOGx4XG4iLAorCQlyZWdzLT5BUk1fcjMsIHJlZ3MtPkFSTV9yMiwgcmVncy0+QVJNX3IxLCByZWdzLT5BUk1fcjApOworCXByaW50ZiAoIkZsYWdzOiAlYyVjJWMlYyIsCisJCWZsYWdzICYgQ0NfTl9CSVQgPyAnTicgOiAnbicsCisJCWZsYWdzICYgQ0NfWl9CSVQgPyAnWicgOiAneicsCisJCWZsYWdzICYgQ0NfQ19CSVQgPyAnQycgOiAnYycsIGZsYWdzICYgQ0NfVl9CSVQgPyAnVicgOiAndicpOworCXByaW50ZiAoIiAgSVJRcyAlcyAgRklRcyAlcyAgTW9kZSAlcyVzXG4iLAorCQlpbnRlcnJ1cHRzX2VuYWJsZWQgKHJlZ3MpID8gIm9uIiA6ICJvZmYiLAorCQlmYXN0X2ludGVycnVwdHNfZW5hYmxlZCAocmVncykgPyAib24iIDogIm9mZiIsCisJCXByb2Nlc3Nvcl9tb2Rlc1twcm9jZXNzb3JfbW9kZSAocmVncyldLAorCQl0aHVtYl9tb2RlIChyZWdzKSA/ICIgKFQpIiA6ICIiKTsKK30KKwordm9pZCBkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24gKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCXByaW50ZiAoInVuZGVmaW5lZCBpbnN0cnVjdGlvblxuIik7CisJc2hvd19yZWdzIChwdF9yZWdzKTsKKwliYWRfbW9kZSAoKTsKK30KKwordm9pZCBkb19zb2Z0d2FyZV9pbnRlcnJ1cHQgKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCXByaW50ZiAoInNvZnR3YXJlIGludGVycnVwdFxuIik7CisJc2hvd19yZWdzIChwdF9yZWdzKTsKKwliYWRfbW9kZSAoKTsKK30KKwordm9pZCBkb19wcmVmZXRjaF9hYm9ydCAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmICgicHJlZmV0Y2ggYWJvcnRcbiIpOworCXNob3dfcmVncyAocHRfcmVncyk7CisJYmFkX21vZGUgKCk7Cit9CisKK3ZvaWQgZG9fZGF0YV9hYm9ydCAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmICgiZGF0YSBhYm9ydFxuIik7CisJc2hvd19yZWdzIChwdF9yZWdzKTsKKwliYWRfbW9kZSAoKTsKK30KKwordm9pZCBkb19ub3RfdXNlZCAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmICgibm90IHVzZWRcbiIpOworCXNob3dfcmVncyAocHRfcmVncyk7CisJYmFkX21vZGUgKCk7Cit9CisKK3ZvaWQgZG9fZmlxIChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYgKCJmYXN0IGludGVycnVwdCByZXF1ZXN0XG4iKTsKKwlzaG93X3JlZ3MgKHB0X3JlZ3MpOworCWJhZF9tb2RlICgpOworfQorCit2b2lkIGRvX2lycSAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmICgiaW50ZXJydXB0IHJlcXVlc3RcbiIpOworCXNob3dfcmVncyAocHRfcmVncyk7CisJYmFkX21vZGUgKCk7Cit9CisKK3N0YXRpYyB1bG9uZyB0aW1lc3RhbXA7CitzdGF0aWMgdWxvbmcgbGFzdGRlYzsKKworLyogbm90aGluZyByZWFsbHkgdG8gZG8gd2l0aCBpbnRlcnJ1cHRzLCBqdXN0IHN0YXJ0cyB1cCBhIGNvdW50ZXIuICovCitpbnQgaW50ZXJydXB0X2luaXQgKHZvaWQpCit7CisJaW50MzJfdCB2YWw7CisKKwkqKChpbnQzMl90ICopIChDRkdfVElNRVJCQVNFICsgTE9BRF9USU0pKSA9IFRJTUVSX0xPQURfVkFMOworCXZhbCA9IE1QVVRJTV9TVCB8IE1QVVRJTV9BUiB8IE1QVVRJTV9DTE9DS19FTkFCTEUgfAorCQkJKENGR19QVlQgPDwgTVBVVElNX1BUVl9CSVQpOworCSooKGludDMyX3QgKikgKENGR19USU1FUkJBU0UgKyBDTlRMX1RJTUVSKSkgPSB2YWw7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIHRpbWVyIHdpdGhvdXQgaW50ZXJydXB0cworICovCisKK3ZvaWQgcmVzZXRfdGltZXIgKHZvaWQpCit7CisJcmVzZXRfdGltZXJfbWFza2VkICgpOworfQorCit1bG9uZyBnZXRfdGltZXIgKHVsb25nIGJhc2UpCit7CisJcmV0dXJuIGdldF90aW1lcl9tYXNrZWQgKCkgLSBiYXNlOworfQorCit2b2lkIHNldF90aW1lciAodWxvbmcgdCkKK3sKKwl0aW1lc3RhbXAgPSB0OworfQorCisvKiB2ZXJ5IHJvdWdoIHRpbWVyLi4uICovCit2b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQoreworI2lmZGVmIENPTkZJR19JTk5PVkFUT1JPTUFQMTYxMAorI2RlZmluZSBMT09QU19QRVJfTVNFQyAxMDAJCS8qIHR1bmVkIG9uIG9tYXAxNjEwICovCisJdm9sYXRpbGUgaW50IGksIHRpbWVfcmVtYWluaW5nID0gTE9PUFNfUEVSX01TRUMgKiB1c2VjOworCisJZm9yIChpID0gdGltZV9yZW1haW5pbmc7IGkgPiAwOyBpLS0pIHsKKwl9CisjZWxzZQorCisJdWxvbmcgdG1vOworCXRtbyA9IHVzZWMgLyAxMDAwOworCXRtbyAqPSBDRkdfSFo7CisJdG1vIC89IDEwMDA7CisJdG1vICs9IGdldF90aW1lciAoMCk7CisJd2hpbGUgKGdldF90aW1lcl9tYXNrZWQgKCkgPCB0bW8pCisJCS8qTk9QKi87CisjZW5kaWYKK30KKwordm9pZCByZXNldF90aW1lcl9tYXNrZWQgKHZvaWQpCit7CisJLyogcmVzZXQgdGltZSAqLworCWxhc3RkZWMgPSBSRUFEX1RJTUVSOworCXRpbWVzdGFtcCA9IDA7Cit9CisKK3Vsb25nIGdldF90aW1lcl9tYXNrZWQgKHZvaWQpCit7CisJdWxvbmcgbm93ID0gUkVBRF9USU1FUjsJCS8qIGN1cnJlbnQgdGljayB2YWx1ZSAqLworCisJaWYgKGxhc3RkZWMgPj0gbm93KSB7CQkvKiBkaWQgSSByb2xsIChyZW0gZGVjcmVtZW50ZXIpICovCisJCS8qIG5vcm1hbCBtb2RlICovCisJCS8qIHJlY29yZCBhbW91bnQgb2YgdGltZSBzaW5jZSBsYXN0IGNoZWNrICovCisJCXRpbWVzdGFtcCArPSBsYXN0ZGVjIC0gbm93OworCX0gZWxzZSB7CisJCS8qIHdlIGhhdmUgYW4gb3ZlcmZsb3cgLi4uICovCisJCXRpbWVzdGFtcCArPSBsYXN0ZGVjICsgVElNRVJfTE9BRF9WQUwgLSBub3c7CisJfQorCWxhc3RkZWMgPSBub3c7CisKKwlyZXR1cm4gdGltZXN0YW1wOworfQorCit2b2lkIHVkZWxheV9tYXNrZWQgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKyNpZmRlZiBDT05GSUdfSU5OT1ZBVE9ST01BUDE2MTAKKwkjZGVmaW5lIExPT1BTX1BFUl9NU0VDIDEwMCAvKiB0dW5lZCBvbiBvbWFwMTYxMCAqLworCXZvbGF0aWxlIGludCBpLCB0aW1lX3JlbWFpbmluZyA9IExPT1BTX1BFUl9NU0VDKnVzZWM7CisJZm9yIChpPXRpbWVfcmVtYWluaW5nOyBpPjA7IGktLSkgeyB9CisjZWxzZQorCisJdWxvbmcgdG1vOworCisJdG1vID0gdXNlYyAvIDEwMDA7CisJdG1vICo9IENGR19IWjsKKwl0bW8gLz0gMTAwMDsKKworCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKKworCXdoaWxlIChnZXRfdGltZXJfbWFza2VkICgpIDwgdG1vKQorCQkvKk5PUCovOworI2VuZGlmCit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHJlYWQgdGltZWJhc2UgYXMgbG9uZyBsb25nKS4KKyAqIE9uIEFSTSBpdCBqdXN0IHJldHVybnMgdGhlIHRpbWVyIHZhbHVlLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgZ2V0X3RpY2tzKHZvaWQpCit7CisJcmV0dXJuIGdldF90aW1lcigwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAodGltZWJhc2UgY2xvY2sgZnJlcXVlbmN5KS4KKyAqIE9uIEFSTSBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXIgdGlja3MgcGVyIHNlY29uZC4KKyAqLwordWxvbmcgZ2V0X3RiY2xrICh2b2lkKQoreworCXVsb25nIHRiY2xrOworCXRiY2xrID0gQ0ZHX0haOworCXJldHVybiB0YmNsazsKK30KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjZlanMvc3RhcnQuUyBiL2NwdS9hcm05MjZlanMvc3RhcnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGIyYmJjCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyNmVqcy9zdGFydC5TCkBAIC0wLDAgKzEsNDI2IEBACisvKgorICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTkyNkVKUyBDUFUtY29yZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDMgIFRleGFzIEluc3RydW1lbnRzCisgKgorICogIC0tLS0tIEFkYXB0ZWQgZm9yIE9NQVAxNjEwIGZyb20gQVJNOTI1dCBjb2RlIC0tLS0tLQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEJTWFyaXVzIEdy9mdlciA8bWFnQHN5c2dvLmRlPgorICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAyCUdhcnkgSmVubmVqb2huIDxnakBkZW54LmRlPgorICogIENvcHlyaWdodCAoYykgMjAwMwlSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAzCUtzaGl0aWogPGtzaGl0aWpAdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfT01BUDE2MTApCisjaW5jbHVkZSA8Li9jb25maWdzL29tYXAxNTEwLmg+CisjZW5kaWYKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSnVtcCB2ZWN0b3IgdGFibGUgYXMgaW4gdGFibGUgMy4xIGluIFsxXQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworCisuZ2xvYmwgX3N0YXJ0Citfc3RhcnQ6CisJYglyZXNldAorCWxkcglwYywgX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgorCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAorCWxkcglwYywgX3ByZWZldGNoX2Fib3J0CisJbGRyCXBjLCBfZGF0YV9hYm9ydAorCWxkcglwYywgX25vdF91c2VkCisJbGRyCXBjLCBfaXJxCisJbGRyCXBjLCBfZmlxCisKK191bmRlZmluZWRfaW5zdHJ1Y3Rpb246CisJLndvcmQgdW5kZWZpbmVkX2luc3RydWN0aW9uCitfc29mdHdhcmVfaW50ZXJydXB0OgorCS53b3JkIHNvZnR3YXJlX2ludGVycnVwdAorX3ByZWZldGNoX2Fib3J0OgorCS53b3JkIHByZWZldGNoX2Fib3J0CitfZGF0YV9hYm9ydDoKKwkud29yZCBkYXRhX2Fib3J0Citfbm90X3VzZWQ6CisJLndvcmQgbm90X3VzZWQKK19pcnE6CisJLndvcmQgaXJxCitfZmlxOgorCS53b3JkIGZpcQorCisJLmJhbGlnbmwgMTYsMHhkZWFkYmVlZgorCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFN0YXJ0dXAgQ29kZSAocmVzZXQgdmVjdG9yKQorICoKKyAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBtZW1vcnkhCisgKiBzZXR1cCBNZW1vcnkgYW5kIGJvYXJkIHNwZWNpZmljIGJpdHMgcHJpb3IgdG8gcmVsb2NhdGlvbi4KKyAqIHJlbG9jYXRlIGFybWJvb3QgdG8gcmFtCisgKiBzZXR1cCBzdGFjaworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoKKyAqIENGR19NRU1fRU5EIGlzIGluIHRoZSBib2FyZCBkZXBlbmRlbnQgY29uZmlnLWZpbGUgKGNvbmZpZ3MvY29uZmlnX0JPQVJELmgpCisgKi8KK19URVhUX0JBU0U6CisJLndvcmQJVEVYVF9CQVNFCisKKy5nbG9ibCBfYXJtYm9vdF9zdGFydAorX2FybWJvb3Rfc3RhcnQ6CisJLndvcmQgX3N0YXJ0CisKKy8qCisgKiBOb3RlOiBfYXJtYm9vdF9lbmRfZGF0YSBhbmQgX2FybWJvb3RfZW5kIGFyZSBkZWZpbmVkCisgKiBieSB0aGUgKGJvYXJkLWRlcGVuZGVudCkgbGlua2VyIHNjcmlwdC4KKyAqIF9hcm1ib290X2VuZF9kYXRhIGlzIHRoZSBmaXJzdCB1c2FibGUgRkxBU0ggYWRkcmVzcyBhZnRlciBhcm1ib290CisgKi8KKy5nbG9ibCBfYXJtYm9vdF9lbmRfZGF0YQorX2FybWJvb3RfZW5kX2RhdGE6CisJLndvcmQgYXJtYm9vdF9lbmRfZGF0YQorLmdsb2JsIF9hcm1ib290X2VuZAorX2FybWJvb3RfZW5kOgorCS53b3JkIGFybWJvb3RfZW5kCisKKy8qCisgKiBfYXJtYm9vdF9yZWFsX2VuZCBpcyB0aGUgZmlyc3QgdXNhYmxlIFJBTSBhZGRyZXNzIGJlaGluZCBhcm1ib290CisgKiBhbmQgdGhlIHZhcmlvdXMgc3RhY2tzCisgKi8KKy5nbG9ibCBfYXJtYm9vdF9yZWFsX2VuZAorX2FybWJvb3RfcmVhbF9lbmQ6CisJLndvcmQgMHgwYmFkYzBkZQorCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKy8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCisuZ2xvYmwgSVJRX1NUQUNLX1NUQVJUCitJUlFfU1RBQ0tfU1RBUlQ6CisJLndvcmQJMHgwYmFkYzBkZQorCisvKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLworLmdsb2JsIEZJUV9TVEFDS19TVEFSVAorRklRX1NUQUNLX1NUQVJUOgorCS53b3JkIDB4MGJhZGMwZGUKKyNlbmRpZgorCisKKy8qCisgKiB0aGUgYWN0dWFsIHJlc2V0IGNvZGUKKyAqLworCityZXNldDoKKwkvKgorCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKKwkgKi8KKwltcnMJcjAsY3BzcgorCWJpYwlyMCxyMCwjMHgxZgorCW9ycglyMCxyMCwjMHhkMworCW1zcgljcHNyLHIwCisKKworCS8qIAorCSAqIHR1cm4gb2ZmIHRoZSB3YXRjaGRvZywgdW5sb2NrL2RpYWJsZSBzZXF1ZW5jZQorCSAqLworCW1vdglyMSwgIzB4RjUKKwlsZHIJcjAsID1XRFRJTV9NT0RFCisJc3RyaAlyMSwgW3IwXQorCW1vdglyMSwgIzB4QTAKKwlzdHJoCXIxLCBbcjBdCisKKworCisKKworCS8qCisJICogbWFzayBhbGwgSVJRcyBieSBzZXR0aW5nIGFsbCBiaXRzIGluIHRoZSBJTlRNUiAtIGRlZmF1bHQKKwkgKi8KKworCW1vdglyMSwgIzB4ZmZmZmZmZmYKKwlsZHIJcjAsID1SRUdfSUhMMV9NSVIKKwlzdHIJcjEsIFtyMF0KKwlsZHIJcjAsID1SRUdfSUhMMl9NSVIKKwlzdHIJcjEsIFtyMF0KKwlibAljcHVfaW5pdF9jcml0CisKK3JlbG9jYXRlOgorCS8qCisJICogcmVsb2NhdGUgYXJtYm9vdCB0byBSQU0KKwkgKi8KKwlhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICovCisJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAorCWxkcglyMywgX2FybWJvb3RfZW5kCisJc3ViCXIyLCByMywgcjIJCS8qIHIyIDwtIHNpemUgb2YgYXJtYm9vdCAqLworCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogcjEgPC0gZGVzdGluYXRpb24gYWRkcmVzcyAqLworCWFkZAlyMiwgcjAsIHIyCQkvKiByMiA8LSBzb3VyY2UgZW5kIGFkZHJlc3MgKi8KKworCS8qCisJICogcjAgPSBzb3VyY2UgYWRkcmVzcworCSAqIHIxID0gdGFyZ2V0IGFkZHJlc3MKKwkgKiByMiA9IHNvdXJjZSBlbmQgYWRkcmVzcworCSAqLworY29weV9sb29wOgorCWxkbWlhCXIwISwge3IzLXIxMH0KKwlzdG1pYQlyMSEsIHtyMy1yMTB9CisJY21wCXIwLCByMgorCWJsZQljb3B5X2xvb3AKKworCS8qIHNldCB1cCB0aGUgc3RhY2sgKi8KKwlsZHIJcjAsIF9hcm1ib290X2VuZAorCWFkZAlyMCwgcjAsICNDT05GSUdfU1RBQ0tTSVpFCisJc3ViCXNwLCByMCwgIzEyCQkvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAqLworCisJbGRyCXBjLCBfc3RhcnRfYXJtYm9vdAorCitfc3RhcnRfYXJtYm9vdDoKKwkud29yZCBzdGFydF9hcm1ib290CisKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ1BVX2luaXRfY3JpdGljYWwgcmVnaXN0ZXJzCisgKgorICogc2V0dXAgaW1wb3J0YW50IHJlZ2lzdGVycworICogc2V0dXAgbWVtb3J5IHRpbWluZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworCitjcHVfaW5pdF9jcml0OgorCS8qCisJICogZmx1c2ggdjQgSS9EIGNhY2hlcworCSAqLworCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCS8qIGZsdXNoIHYzL3Y0IGNhY2hlICovCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkvKiBmbHVzaCB2NCBUTEIgKi8KKworCS8qCisJICogZGlzYWJsZSBNTVUgc3R1ZmYgYW5kIGNhY2hlcworCSAqLworCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKwliaWMJcjAsIHIwLCAjMHgwMDAwMjMwMAkvKiBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykgKi8KKwliaWMJcjAsIHIwLCAjMHgwMDAwMDA4NwkvKiBjbGVhciBiaXRzIDcsIDI6MCAoQi0tLSAtQ0FNKSAqLworCW9ycglyMCwgcjAsICMweDAwMDAwMDAyCS8qIHNldCBiaXQgMiAoQSkgQWxpZ24gKi8KKwlvcnIJcjAsIHIwLCAjMHgwMDAwMTAwMAkvKiBzZXQgYml0IDEyIChJKSBJLUNhY2hlICovCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAorCisJLyoKKwkgKiBHbyBzZXR1cCBNZW1vcnkgYW5kIGJvYXJkIHNwZWNpZmljIGJpdHMgcHJpb3IgdG8gcmVsb2NhdGlvbi4KKwkgKi8KKwltb3YJaXAsIGxyCQkvKiBwZXJzZXJ2ZSBsaW5rIHJlZyBhY3Jvc3MgY2FsbCAqLworCWJsCXBsYXRmb3Jtc2V0dXAJLyogZ28gc2V0dXAgcGxsLG11eCxtZW1vcnkgKi8KKwltb3YJbHIsIGlwCQkvKiByZXN0b3JlIGxpbmsgKi8KKwltb3YJcGMsIGxyCQkvKiBiYWNrIHRvIG15IGNhbGxlciAqLworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSW50ZXJydXB0IGhhbmRsaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitACitAIElSUSBzdGFjayBmcmFtZS4KK0AKKyNkZWZpbmUgU19GUkFNRV9TSVpFCTcyCisKKyNkZWZpbmUgU19PTERfUjAJNjgKKyNkZWZpbmUgU19QU1IJCTY0CisjZGVmaW5lIFNfUEMJCTYwCisjZGVmaW5lIFNfTFIJCTU2CisjZGVmaW5lIFNfU1AJCTUyCisKKyNkZWZpbmUgU19JUAkJNDgKKyNkZWZpbmUgU19GUAkJNDQKKyNkZWZpbmUgU19SMTAJCTQwCisjZGVmaW5lIFNfUjkJCTM2CisjZGVmaW5lIFNfUjgJCTMyCisjZGVmaW5lIFNfUjcJCTI4CisjZGVmaW5lIFNfUjYJCTI0CisjZGVmaW5lIFNfUjUJCTIwCisjZGVmaW5lIFNfUjQJCTE2CisjZGVmaW5lIFNfUjMJCTEyCisjZGVmaW5lIFNfUjIJCTgKKyNkZWZpbmUgU19SMQkJNAorI2RlZmluZSBTX1IwCQkwCisKKyNkZWZpbmUgTU9ERV9TVkMgMHgxMworI2RlZmluZSBJX0JJVAkgMHg4MAorCisvKgorICogdXNlIGJhZF9zYXZlX3VzZXJfcmVncyBmb3IgYWJvcnQvcHJlZmV0Y2gvdW5kZWYvc3dpIC4uLgorICogdXNlIGlycV9zYXZlX3VzZXJfcmVncyAvIGlycV9yZXN0b3JlX3VzZXJfcmVncyBmb3IgSVJRL0ZJUSBoYW5kbGluZworICovCisKKwkubWFjcm8JYmFkX3NhdmVfdXNlcl9yZWdzCisJQCBjYXJ2ZSBvdXQgYSBmcmFtZSBvbiBjdXJyZW50IHVzZXIgc3RhY2sKKwlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCisJc3RtaWEJc3AsIHtyMCAtIHIxMn0JQCBTYXZlIHVzZXIgcmVnaXN0ZXJzIChub3cgaW4gc3ZjIG1vZGUpIHIwLXIxMgorCWxkcglyMiwgX2FybWJvb3RfZW5kCUAgZmluZCB0b3Agb2Ygc3RhY2sKKwlhZGQJcjIsIHIyLCAjQ09ORklHX1NUQUNLU0laRQlAIGZpbmQgYmFzZSBvZiBub3JtYWwgc3RhY2sKKwlzdWIJcjIsIHIyLCAjOAlAIHNldCBiYXNlIDIgd29yZHMgaW50byBhYm9ydCBzdGFjaworCUAgZ2V0IHZhbHVlcyBmb3IgImFib3J0ZWQiIHBjIGFuZCBjcHNyIChpbnRvIHBhcm0gcmVncykKKwlsZG1pYQlyMiwge3IyIC0gcjN9CisJYWRkCXIwLCBzcCwgI1NfRlJBTUVfU0laRQkJQCBncmFiIHBvaW50ZXIgdG8gb2xkIHN0YWNrCisJYWRkCXI1LCBzcCwgI1NfU1AKKwltb3YJcjEsIGxyCisJc3RtaWEJcjUsIHtyMCAtIHIzfQlAIHNhdmUgc3BfU1ZDLCBscl9TVkMsIHBjLCBjcHNyCisJbW92CXIwLCBzcAkJQCBzYXZlIGN1cnJlbnQgc3RhY2sgaW50byByMCAocGFyYW0gcmVnaXN0ZXIpCisJLmVuZG0KKworCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKKwlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCisJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIENhbGxpbmcgcjAtcjEyCisJQCAhISEhIFI4IE5FRURTIHRvIGJlIHNhdmVkICEhISEgYSByZXNlcnZlZCBzdGFjayBzcG90IHdvdWxkIGJlIGdvb2QuCisJYWRkCXI4LCBzcCwgI1NfUEMKKwlzdG1kYglyOCwge3NwLCBscn1eCQlAIENhbGxpbmcgU1AsIExSCisJc3RyCWxyLCBbcjgsICMwXQkJQCBTYXZlIGNhbGxpbmcgUEMKKwltcnMJcjYsIHNwc3IKKwlzdHIJcjYsIFtyOCwgIzRdCQlAIFNhdmUgQ1BTUgorCXN0cglyMCwgW3I4LCAjOF0JCUAgU2F2ZSBPTERfUjAKKwltb3YJcjAsIHNwCisJLmVuZG0KKworCS5tYWNybwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKKwlsZG1pYQlzcCwge3IwIC0gbHJ9XgkJCUAgQ2FsbGluZyByMCAtIGxyCisJbW92CXIwLCByMAorCWxkcglsciwgW3NwLCAjU19QQ10JCQlAIEdldCBQQworCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUKKwlzdWJzCXBjLCBsciwgIzQJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKKwkuZW5kbQorCisJLm1hY3JvIGdldF9iYWRfc3RhY2sKKwlAIGdldCBib3R0b20gb2Ygc3RhY2sgKGludG8gc3AgYnkgYnkgdXNlciBzdGFjayBwb2ludGVyKS4KKwlsZHIJcjEzLCBfYXJtYm9vdF9lbmQKKwlAIGhlYWQgdG8gcmVzZXJ2ZWQgd29yZHMgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sKKwlhZGQJcjEzLCByMTMsICNDT05GSUdfU1RBQ0tTSVpFCisJc3ViCXIxMywgcjEzLCAjOAlAIHJlc2VydmVkIGEgY291cGxlIHNwb3RzIGluIGFib3J0IHN0YWNrCisKKwlzdHIJbHIsIFtyMTNdCUAgc2F2ZSBjYWxsZXIgbHIgaW4gcG9zaXRpb24gMCBvZiBzYXZlZCBzdGFjaworCW1ycwlsciwgc3BzcglAIGdldCB0aGUgc3BzcgorCXN0cglsciwgW3IxMywgIzRdCUAgc2F2ZSBzcHNyIGluIHBvc2l0aW9uIDEgb2Ygc2F2ZWQgc3RhY2sKKwltb3YJcjEzLCAjTU9ERV9TVkMJQCBwcmVwYXJlIFNWQy1Nb2RlCisJQCBtc3IJc3Bzcl9jLCByMTMKKwltc3IJc3BzciwgcjEzCUAgc3dpdGNoIG1vZGVzLCBtYWtlIHN1cmUgbW92ZXMgd2lsbCBleGVjdXRlCisJbW92CWxyLCBwYwkJQCBjYXB0dXJlIHJldHVybiBwYworCW1vdnMJcGMsIGxyCQlAIGp1bXAgdG8gbmV4dCBpbnN0cnVjdGlvbiAmIHN3aXRjaCBtb2Rlcy4KKwkuZW5kbQorCisJLm1hY3JvIGdldF9pcnFfc3RhY2sJCQlAIHNldHVwIElSUSBzdGFjaworCWxkcglzcCwgSVJRX1NUQUNLX1NUQVJUCisJLmVuZG0KKworCS5tYWNybyBnZXRfZmlxX3N0YWNrCQkJQCBzZXR1cCBGSVEgc3RhY2sKKwlsZHIJc3AsIEZJUV9TVEFDS19TVEFSVAorCS5lbmRtCisKKy8qCisgKiBleGNlcHRpb24gaGFuZGxlcnMKKyAqLworCS5hbGlnbiAgNQordW5kZWZpbmVkX2luc3RydWN0aW9uOgorCWdldF9iYWRfc3RhY2sKKwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlibAlkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24KKworCS5hbGlnbgk1Citzb2Z0d2FyZV9pbnRlcnJ1cHQ6CisJZ2V0X2JhZF9zdGFjaworCWJhZF9zYXZlX3VzZXJfcmVncworCWJsCWRvX3NvZnR3YXJlX2ludGVycnVwdAorCisJLmFsaWduCTUKK3ByZWZldGNoX2Fib3J0OgorCWdldF9iYWRfc3RhY2sKKwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlibAlkb19wcmVmZXRjaF9hYm9ydAorCisJLmFsaWduCTUKK2RhdGFfYWJvcnQ6CisJZ2V0X2JhZF9zdGFjaworCWJhZF9zYXZlX3VzZXJfcmVncworCWJsCWRvX2RhdGFfYWJvcnQKKworCS5hbGlnbgk1Citub3RfdXNlZDoKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwJZG9fbm90X3VzZWQKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisKKwkuYWxpZ24JNQoraXJxOgorCWdldF9pcnFfc3RhY2sKKwlpcnFfc2F2ZV91c2VyX3JlZ3MKKwlibCAJZG9faXJxCisJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCisKKwkuYWxpZ24JNQorZmlxOgorCWdldF9maXFfc3RhY2sKKwkvKiBzb21lb25lIG91Z2h0IHRvIHdyaXRlIGEgbW9yZSBlZmZpY3Rpb24gZmlxX3NhdmVfdXNlcl9yZWdzICovCisJaXJxX3NhdmVfdXNlcl9yZWdzCisJYmwgCWRvX2ZpcQorCWlycV9yZXN0b3JlX3VzZXJfcmVncworCisjZWxzZQorCisJLmFsaWduCTUKK2lycToKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwJZG9faXJxCisKKwkuYWxpZ24JNQorZmlxOgorCWdldF9iYWRfc3RhY2sKKwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlibAlkb19maXEKKworI2VuZGlmCisKKwkuYWxpZ24JNQorLmdsb2JsIHJlc2V0X2NwdQorcmVzZXRfY3B1OgorCWxkcglyMSwgcnN0Y3RsMQkvKiBnZXQgY2xrbTEgcmVzZXQgY3RsICovCisJbW92CXIzLCAjMHgwCQorCXN0cmgJcjMsIFtyMV0JLyogY2xlYXIgaXQgKi8KKwltb3YJcjMsICMweDgKKwlzdHJoCXIzLCBbcjFdCS8qIGZvcmNlIGRzcCthcm0gcmVzZXQgKi8KK19sb29wX2ZvcmV2ZXI6CisJYglfbG9vcF9mb3JldmVyCisKKworcnN0Y3RsMToKKwkud29yZAkweGZmZmVjZTEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25zMTY1NTAuYyBiL2RyaXZlcnMvbnMxNjU1MC5jCmluZGV4IGIyMGFlNGIuLmE3YWE0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnMxNjU1MC5jCisrKyBiL2RyaXZlcnMvbnMxNjU1MC5jCkBAIC0yNiwxMCArMjYsOSBAQAogCWNvbV9wb3J0LT5sY3IgPSBMQ1JWQUw7CiAJY29tX3BvcnQtPm1jciA9IE1DUlZBTDsKIAljb21fcG9ydC0+ZmNyID0gRkNSVkFMOwotI2lmZGVmIENPTkZJR19PTUFQMTUxMAotCWNvbV9wb3J0LT5tZHIxID0gMDsgLyogc2VsZWN0IHVhcnQgbW9kZSAqLworI2lmIGRlZmluZWQoQ09ORklHX09NQVAxNTEwKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQMTYxMCkKKwljb21fcG9ydC0+bWRyMSA9IDA7CS8qIHNlbGVjdCB1YXJ0IG1vZGUgKi8KICNlbmRpZgotCiB9CiAKIHZvaWQgTlMxNjU1MF9yZWluaXQgKE5TMTY1NTBfdCBjb21fcG9ydCwgaW50IGJhdWRfZGl2aXNvcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC5jCmluZGV4IDQ0ODc1ZTUuLmY1YjUxZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwuYwpAQCAtNTMsNiArNTMsMTIgQEAKIAl9CiAJY29uc29sZS0+b3NjXzEybV9zZWwgPSAwOwkJCS8qIGNsZWFyIGlmIHByZXZpc291bHkgc2V0ICovCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfT01BUDE2MTAKKwkvKiBJZiBjYW4ndCBjbGVhbmx5IGNsb2NrIDExNTIwMCBzZXQgZGl2IHRvIDEgKi8KKwlpZiAoKENGR19OUzE2NTUwX0NMSyA9PSA0ODAwMDAwMCkgJiYgKGdkLT5iYXVkcmF0ZSA9PSAxMTUyMDApKSB7CisJCXJldHVybiAoMjYpOwkJLyogcmV0dXJuIDI2IGZvciBiYXNlIGRpdmlzb3IgKi8KKwl9CisjZW5kaWYKIAlyZXR1cm4gKENGR19OUzE2NTUwX0NMSyAvIDE2IC8gZ2QtPmJhdWRyYXRlKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hcm05MjZlanMuaCBiL2luY2x1ZGUvYXJtOTI2ZWpzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2MDI2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXJtOTI2ZWpzLmgKQEAgLTAsMCArMSw4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOQU1FICAgICAgICAgICAgICAgICBhcm05MjZlanMuaCAgICAgICAgICAgICAqCisgKiBWZXJzaW9uICAgICAgOiAgICAgICAyMyBKdW5lIDIwMDMgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ3VycmVudGx5IGVtcHR5ICovCisjaWZuZGVmIF9fQVJNOTI2RUpTX0hfXworI2RlZmluZSBfX0FSTTkyNkVKU19IX18KKyNlbmRpZiAvKl9fQVJNOTI2RUpTX0hfXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm05MjZlanMvc2l6ZXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTkyNmVqcy9zaXplcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGI5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm05MjZlanMvc2l6ZXMuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEwIDIxMTEtMTMwNworICogVVNBCisgKi8KKy8qIERPIE5PVCBFRElUISEgLSB0aGlzIGZpbGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQKKyAqCQkgICBmcm9tIC5zIGZpbGUgYnkgYXdrIC1mIHMyaC5hd2sKKyAqLworLyogIFNpemUgZGVmaW50aW9ucworICogIENvcHlyaWdodCAoQykgQVJNIExpbWl0ZWQgMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9fc2l6ZXNfaAorI2RlZmluZSBfX3NpemVzX2gJCQkxCisKKy8qIGhhbmR5IHNpemVzICovCisjZGVmaW5lIFNaXzFLCQkweDAwMDAwNDAwCisjZGVmaW5lIFNaXzRLCQkweDAwMDAxMDAwCisjZGVmaW5lIFNaXzhLCQkweDAwMDAyMDAwCisjZGVmaW5lIFNaXzE2SwkJMHgwMDAwNDAwMAorI2RlZmluZSBTWl82NEsJCTB4MDAwMTAwMDAKKyNkZWZpbmUgU1pfMTI4SwkweDAwMDIwMDAwCisjZGVmaW5lIFNaXzI1NksJMHgwMDA0MDAwMAorI2RlZmluZSBTWl81MTJLCTB4MDAwODAwMDAKKworI2RlZmluZSBTWl8xTQkJMHgwMDEwMDAwMAorI2RlZmluZSBTWl8yTQkJMHgwMDIwMDAwMAorI2RlZmluZSBTWl80TQkJMHgwMDQwMDAwMAorI2RlZmluZSBTWl84TQkJMHgwMDgwMDAwMAorI2RlZmluZSBTWl8xNk0JCTB4MDEwMDAwMDAKKyNkZWZpbmUgU1pfMzJNCQkweDAyMDAwMDAwCisjZGVmaW5lIFNaXzY0TQkJMHgwNDAwMDAwMAorI2RlZmluZSBTWl8xMjhNCTB4MDgwMDAwMDAKKyNkZWZpbmUgU1pfMjU2TQkweDEwMDAwMDAwCisjZGVmaW5lIFNaXzUxMk0JMHgyMDAwMDAwMAorCisjZGVmaW5lIFNaXzFHCQkweDQwMDAwMDAwCisjZGVmaW5lIFNaXzJHCQkweDgwMDAwMDAwCisKKyNlbmRpZgkvKiBfX3NpemVzX2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwMTUxMC5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAxNTEwLmgKaW5kZXggNTQwNjMwYi4uZGZjYjM2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL29tYXAxNTEwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXAxNTEwLmgKQEAgLTE3NSw2ICsxNzUsMTggQEAKIAogI2RlZmluZSBNT0RfQ09ORl9DVFJMXzAJCTB4ZmZmZTEwODAKIAorI2lmZGVmIENPTkZJR19PTUFQMTYxMCAvKiAxNjEwIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKworI2RlZmluZSBVU0JfT1RHX0NUUkwJCQkweEZGRkIwNDBDCisjZGVmaW5lIFVTQl9UUkFOU0NFSVZFUl9DVFJMCTB4RkZGRTEwNjQKKyNkZWZpbmUgUFVMTF9EV05fQ1RSTF80CTB4RkZGRTEwQUMKKyNkZWZpbmUgUFVfUERfU0VMXzAJCTB4RkZGRTEwQjQKKyNkZWZpbmUgUFVfUERfU0VMXzEJCTB4RkZGRTEwQjgKKyNkZWZpbmUgUFVfUERfU0VMXzIJCTB4RkZGRTEwQkMKKyNkZWZpbmUgUFVfUERfU0VMXzMJCTB4RkZGRTEwQzAKKyNkZWZpbmUgUFVfUERfU0VMXzQJCTB4RkZGRTEwQzQKKworI2VuZGlmCiAvKgogICogVHJhZmZpYyBDb250cm9sbGVyIE1lbW9yeSBJbnRlcmZhY2UgUmVnaXN0ZXJzCiAgKi8KQEAgLTUyMSw2ICs1MzMsNyBAQAogI2RlZmluZSBXRFRJTV9DT05UUk9MX1NUCUJJVDcKIAogCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIERpZmZlcmVudGlhdGluZyBwcm9jZXNzb3IgdmVyc2lvbnMgZm9yIHRob3NlIHdobyBjYXJlLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDE2MTBpbm4uaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwMTYxMGlubi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZmFkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDE2MTBpbm4uaApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogVGV4YXMgSW5zdHJ1bWVudHMuCisgKiBLc2hpdGlqIEd1cHRhIDxrc2hpdGlqQHRpLmNvbT4KKyAqIENvbmZpZ3VhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIFRJIE9NQVAgSW5ub3ZhdG9yIGJvYXJkLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICogKGVhc3kgdG8gY2hhbmdlKQorICovCisjZGVmaW5lIENPTkZJR19BUk05MjZFSlMJMQkvKiBUaGlzIGlzIGFuIGFybTkyNmVqcyBDUFUgY29yZSAgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAJMQkJCS8qIGluIGEgVEkgT01BUCBjb3JlICAgICovCisjZGVmaW5lIENPTkZJR19PTUFQMTYxMAkxCQkvKiB3aGljaCBpcyBpbiBhIDE2MTAgICovCisjZGVmaW5lIENPTkZJR19JTk5PVkFUT1JPTUFQMTYxMAkxCS8qICBhIElubm92YXRvciBCb2FyZCAgKi8KKworLyogaW5wdXQgY2xvY2sgb2YgUExMICovCisvKiB0aGUgT01BUDE2MTAgSW5ub3ZhdG9yIGhhcyAxMk1IeiBpbnB1dCBjbG9jayAqLworI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTEyMDAwMDAwCisKKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgKi8KKworI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKworLyoKKyAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCShDRkdfRU5WX1NJWkUgKyAxMjgqMTAyNCkKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworLyoKKyovCisjZGVmaW5lIENPTkZJR19EUklWRVJfTEFOOTFDOTYKKyNkZWZpbmUgQ09ORklHX0xBTjkxQzk2X0JBU0UgMHgwNDAwMDMwMAorI2RlZmluZSBDT05GSUdfTEFOOTFDOTZfRVhUX1BIWQorCisvKgorICogTlMxNjU1MCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX05TMTY1NTAKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfU0VSSUFMCisjZGVmaW5lIENGR19OUzE2NTUwX1JFR19TSVpFCSgtNCkKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ0xLCSg0ODAwMDAwMCkJLyogY2FuIGJlIDEyTS8zMktoeiBvciA0OE1oeiAqLworI2RlZmluZSBDRkdfTlMxNjU1MF9DT00xCTB4ZmZmYjAwMDAJLyogdWFydDEsIGJsdWV0b290aCB1YXJ0IAorCQkJCQkJb24gaGVsZW4gKi8KKworLyoKKyAqIHNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX1NFUklBTDEJMQkvKiB3ZSB1c2UgU0VSSUFMIDEgb24gT01BUDE2MTAgSW5ub3ZhdG9yICovCisKKy8qIGFsbG93IHRvIG92ZXJ3cml0ZSBzZXJpYWwgYW5kIGV0aGFkZHIgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVgJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCShDT05GSUdfQ01EX0RGTCB8IENGR19DTURfREhDUCkKKyNkZWZpbmUgQ09ORklHX0JPT1RQX01BU0sJQ09ORklHX0JPT1RQX0RFRkFVTFQKKworLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorI2luY2x1ZGUgPGNvbmZpZ3Mvb21hcDE1MTAuaD4KKworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCSJtZW09MzJNIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjggbm9pbml0cmQgXAorCQkJCXJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0xNTcuODcuODIuNDg6XAorCQkJCS9ob21lL2EwODc1NDUxL213ZC9teWZzL3RhcmdldCBpcD1kaGNwIgorI2RlZmluZSBDT05GSUdfTkVUTUFTSwkyNTUuMjU1LjI1NC4wCS8qIHRhbGsgb24gTVkgbG9jYWwgbmV0ICovCisjZGVmaW5lIENPTkZJR19JUEFERFIJMTU2LjExNy45Ny4xNTYJLyogc3RhdGljIElQIEkgY3VycmVudGx5IG93biAqLworI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJMTU2LjExNy45Ny4xMzkJLyogY3VycmVudCBJUCBvZiBteSBkZXYgcGMgKi8KKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFCSJ1SW1hZ2UiCS8qIGZpbGUgdG8gbG9hZCAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMTE1MjAwCS8qIHNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCisjZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkxCS8qIHdoaWNoIHNlcmlhbCBwb3J0IHRvIHVzZSAqLworI2VuZGlmCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5ICAgICAqLworI2RlZmluZSBDRkdfUFJPTVBUCSJPTUFQMTYxMCBJbm5vdmF0b3IgIyAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgICAqLworI2RlZmluZSBDRkdfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgICovCisvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfUEJTSVpFCShDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikKKyNkZWZpbmUgQ0ZHX01BWEFSR1MJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICAgKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAgICAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCTB4MTAwMDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJMHgxMjAwMDAwMAkvKiAzMiBNQiBpbiBEUkFNICAgICovCisKKyN1bmRlZglDRkdfQ0xLU19JTl9IWgkJLyogZXZlcnl0aGluZywgaW5jbCBib2FyZCBpbmZvLCBpbiBIeiAqLworCisjZGVmaW5lIENGR19MT0FEX0FERFIJMHgxMDAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisvKiBUaGUgMTYxMCBoYXMgNiB0aW1lcnMsIHRoZXkgY2FuIGJlIGRyaXZlbiBieSB0aGUgUmVmQ2xrICgxMk1oeikgb3IgYnkgCisgKiBEUExMMS4gVGhpcyB0aW1lIGlzIGZ1cnRoZXIgc3ViZGl2aWRlZCBieSBhIGxvY2FsIGRpdmlzb3IuCisgKi8KKyNkZWZpbmUgQ0ZHX1RJTUVSQkFTRQkweEZGRkVDNTAwCS8qIHVzZSB0aW1lciAxICovCisjZGVmaW5lIENGR19QVlQJNwkvKiAyXihwdnQrMSksIGRpdmlkZSBieSAyNTYgKi8KKyNkZWZpbmUgQ0ZHX0haCSgoQ09ORklHX1NZU19DTEtfRlJFUSkvKDIgPDwgQ0ZHX1BWVCkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YWNrIHNpemVzCisgKgorICogVGhlIHN0YWNrIHNpemVzIGFyZSBzZXQgdXAgaW4gc3RhcnQuUyB1c2luZyB0aGUgc2V0dGluZ3MgYmVsb3cKKyAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgxMjgqMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfSVJRCSg0KjEwMjQpCS8qIElSUSBzdGFjayAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0ZJUQkoNCoxMDI0KQkvKiBGSVEgc3RhY2sgKi8KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQaHlzaWNhbCBNZW1vcnkgTWFwCisgKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQkvKiB3ZSBoYXZlIDEgYmFuayBvZiBEUkFNICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMQkweDEwMDAwMDAwCS8qIFNEUkFNIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUJMHgwMjAwMDAwMAkvKiAzMiBNQiAqLworCisjZGVmaW5lIFBIWVNfRkxBU0hfMQkweDAwMDAwMDAwCS8qIEZsYXNoIEJhbmsgIzEgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQlQSFlTX0ZMQVNIXzEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgorICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLworI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkUJMHgwMjAwMDAwMAkvKiAzMk1CICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkoMjU5KQkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKy8qIGFkZHIgb2YgZW52aXJvbm1lbnQgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCShDRkdfRkxBU0hfQkFTRSArIDB4MDIwMDAwKQorCisvKiB0aW1lb3V0IHZhbHVlcyBhcmUgaW4gdGlja3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJKDIwKkNGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJKDIwKkNGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCTB4MjAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJMHgyMDAwMAkvKiBlbnZpcm9ubWVudCBzdGFydHMgaGVyZSAgKi8KKworI2VuZGlmCQkJCQkJCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZmxhc2guaCBiL2luY2x1ZGUvZmxhc2guaAppbmRleCA0Y2Q0NjdhLi5lOTNiODZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZsYXNoLmgKKysrIGIvaW5jbHVkZS9mbGFzaC5oCkBAIC0yMTMsNiArMjEzLDcgQEAKICNkZWZpbmUgSU5URUxfSURfMjhGMzIwSjNBICAweDAwMTYwMDE2CS8qICAzMk0gPSAxMjhLIHggIDMyCSovCiAjZGVmaW5lIElOVEVMX0lEXzI4RjY0MEozQSAgMHgwMDE3MDAxNwkvKiAgNjRNID0gMTI4SyB4ICA2NAkqLwogI2RlZmluZSBJTlRFTF9JRF8yOEYxMjhKM0EgIDB4MDAxODAwMTgJLyogMTI4TSA9IDEyOEsgeCAxMjgJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMjU2TDE4VCAweDg4MEQ4ODBECS8qIDI1Nk0gPSAxMjhLIHggMjU1ICsgMzJrIHggNCAqLwogCiAjZGVmaW5lIElOVEVMX0lEXzI4RjE2MFMzICAgMHgwMEQwMDBEMAkvKiAgMTZNID0gNTEySyB4ICAzMiAoNjRrQiB4IDMyKQkqLwogI2RlZmluZSBJTlRFTF9JRF8yOEYzMjBTMyAgIDB4MDBENDAwRDQJLyogIDMyTSA9IDUxMksgeCAgNjQgKDY0a0IgeCA2NCkJKi8KQEAgLTMxOSw2ICszMjAsOCBAQAogI2RlZmluZSBGTEFTSF9BTUxWMzIwVQkweDAwQTIJCS8qIEFNRCAyOUxWMTI4TSAgICAoIDEyOE0gPSA4TSB4IDE2ICkJKi8KICNkZWZpbmUgRkxBU0hfQU1MVjY0MFUJMHgwMEE0CQkvKiBBTUQgMjlMVjY0ME0gICAgKCA2NE0gPSA0TSB4IDE2ICkJKi8KICNkZWZpbmUgRkxBU0hfQU1MVjEyOFUJMHgwMEE2CQkvKiBBTUQgMjlMVjEyOE0JICAgKCAxMjhNID0gOE0geCAxNiApCSovCisvKiBJbnRlbCAyOEYyNTZMMThUIDI1Nk0gPSAxMjhLIHggMjU1ICsgMzJrIHggNAkqLworI2RlZmluZSBGTEFTSF8yOEYyNTZMMThUIDB4MDBBOAogCiAjZGVmaW5lIEZMQVNIX1VOS05PV04JMHhGRkZGCQkvKiB1bmtub3duIGZsYXNoIHR5cGUJCQkqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25zMTY1NTAuaCBiL2luY2x1ZGUvbnMxNjU1MC5oCmluZGV4IGRmZjQxNjUuLjRkZDM5ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbnMxNjU1MC5oCisrKyBiL2luY2x1ZGUvbnMxNjU1MC5oCkBAIC02MCw4ICs2MCwxMCBAQAogCWludCBwYWQ3OjI0OwogCXVuc2lnbmVkIGNoYXIgc2NyOwkJLyogNyAqLwogCWludCBwYWQ4OjI0OwotI2lmZGVmIENPTkZJR19PTUFQMTUxMAorI2lmIGRlZmluZWQoQ09ORklHX09NQVAxNTEwKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQMTYxMCkKIAl1bnNpZ25lZCBjaGFyIG1kcjE7CQkvKiBtb2RlIHNlbGVjdCByZXNldCBUTDE2Qzc1MCovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfT01BUDE1MTAKIAlpbnQgcGFkOToyNDsKIAl1bnNpZ25lZCBsb25nIHBhZFsxMF07CiAJdW5zaWduZWQgY2hhciBvc2NfMTJtX3NlbDsK